查看当前JVM内存使用情况

java.lang.Runtime类提供了查看当前JVM内存的使用情况。每个java实例(即虚拟机实例)只有一个Runtime的实例,通过Runtime.getRuntime()可以得到当前虚拟机中的Runtime实例对象。

Runtime提供3个方法可以获取当前JVM最大可以使用内存、当前JVM已拥有最大内存和剩余未使用内存。这3个内存指的都是JVM堆内存。

Runtime.maxMemory();

Runtime.totalMemory();

Runtime.freeMemory();

首先在JAVA的启动参数中加入指定-Xmx100m,设置JVM堆最大可以使用100m的内存。

Runtime run = Runtime.getRuntime();

long max = run.maxMemory();

long total = run.totalMemory();

long free = run.freeMemory();

long usable = max - total + free;

System.out.println("最大内存 = " + max);

System.out.println("已分配内存 = " + total);

System.out.println("已分配内存中的剩余空间 = " + free);

System.out.println("最大可用内存 = " + usable);

上面代码的输出结果如下(这些内存大小与运行环境相关)

最大内存 = 104071168

已分配内存 = 5177344

已分配内存中的剩余空间 = 4937280

最大可用内存 = 103831104

最大内存(maxMemory)是通过启动JAVA虚拟机时使用参数-Xmx100m指定的,而输出也确实是100m。这表示JVM的堆内存最大可以使用104071168字节。

已分配内存(totalMemory)jvm使用的内存都是从本地系统获取的,但是通常jvm刚启动的时候,并不会向系统申请全部的内存。而是根据所加载的Class和相关资源的容量来决

定的。在本例中,由于只在一个main()主方法中执行了上面的几行简单的代码。所以JVM只申请了5177344字节的内存。

已分配内存中的剩余空间(freeMemory) 这是相对以分配内存(totalMemeory)计算的,相当于totalMemory - 已使用内存。当freeMemory 快要接近0时,以分配的内存即将耗尽,JVM会决定再次向系统申请更多的内存。

最大可用内存 (usable)这是JVM真正还可以再继续使用的内存(不考虑之后垃圾回收再次得到的内存)。由【最大内存 - 已分配内存 + 已分配内存中的剩余空间】计算得到。

java.lang.Runtime类提供了查看当前JVM内存的使用情况。每个java实例(即虚拟机实例)只有一个Runtime的实例,通过Runtime.getRuntime()可以得到当前虚拟机中的Runtime实例对象。

Runtime提供3个方法可以获取当前JVM最大可以使用内存、当前JVM已拥有最大内存和剩余未使用内存。这3个内存指的都是JVM堆内存。

Runtime.maxMemory();

Runtime.totalMemory();

Runtime.freeMemory();

首先在JAVA的启动参数中加入指定-Xmx100m,设置JVM堆最大可以使用100m的内存。

Runtime run = Runtime.getRuntime();

long max = run.maxMemory();

long total = run.totalMemory();

long free = run.freeMemory();

long usable = max - total + free;

System.out.println("最大内存 = " + max);

System.out.println("已分配内存 = " + total);

System.out.println("已分配内存中的剩余空间 = " + free);

System.out.println("最大可用内存 = " + usable);

上面代码的输出结果如下(这些内存大小与运行环境相关)

最大内存 = 104071168

已分配内存 = 5177344

已分配内存中的剩余空间 = 4937280

最大可用内存 = 103831104

最大内存(maxMemory)是通过启动JAVA虚拟机时使用参数-Xmx100m指定的,而输出也确实是100m。这表示JVM的堆内存最大可以使用104071168字节。

已分配内存(totalMemory)jvm使用的内存都是从本地系统获取的,但是通常jvm刚启动的时候,并不会向系统申请全部的内存。而是根据所加载的Class和相关资源的容量来决

定的。在本例中,由于只在一个main()主方法中执行了上面的几行简单的代码。所以JVM只申请了5177344字节的内存。

已分配内存中的剩余空间(freeMemory) 这是相对以分配内存(totalMemeory)计算的,相当于totalMemory - 已使用内存。当freeMemory 快要接近0时,以分配的内存即将耗尽,JVM会决定再次向系统申请更多的内存。

最大可用内存 (usable)这是JVM真正还可以再继续使用的内存(不考虑之后垃圾回收再次得到的内存)。由【最大内存 - 已分配内存 + 已分配内存中的剩余空间】计算得到。


相关内容

  • 集成系统运维投标文件(含运维方案)
  • 目录 一.法定代表人授权书 ............................................................................................................ 2 二.法定代表人或其授权代表身份证复印件 ..... ...

  • 对象与内存控制
  • 疯狂java读书笔记 java内存管理分为两部分:内存的分配与内存的回收 内存的分配:指创建java对象时,jvm为该对象在堆内存中所分配的内存空间. 内存的回收:指当该java对象失去引用,变成垃圾时,jvm的垃圾回收机制自动清理该对象,并回收该对象占用的内存. jvm的垃圾回收机制由一条后台线程 ...

  • 面试常见考题_java基础(全)
  • J2SE 基础 九种基本数据类型的大小,以及他们的封装类. 基本类型:boolean byte char short int long float double void 封装类型:Boolean Byte ● 基本数据类型与其对应的封装类由于本质的不同,具有一些区别: 基本数据类型只能按值传递,而 ...

  • 类和对象3
  • 4.Java中的类和对象[第三章节草案] 收藏 本文目录:[蓝色部分为本章的目录] 1.基本概念 2.Java变量相关 1)Java变量分类 2)Java中变量的初始化 3)Java变量修饰符和访问域 4)Java类修饰符[不包含内部类] 3.Java涉及OO的关键知识点[主体] 1)继承的基本概念 ...

  • 面试题与答案
  • 1. 面向对象的特征有哪些方面 1. 抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2.继承: 继承是一种联结类的层次模型,并且允许和鼓 ...

  • 已分享过jsp常见面试题(4)
  • 已分享过 jsp常见面试题(4) JSP企业面试题整理(1) 图示三层架构,并说明其特点,如何实现,每层实现什么功能?(企业笔试题) 在两层应用中,应用程序直接同数据库进行对话.三层结构在用户接口代码和数据库中间加入了一个附加的逻辑层,通常这个层叫做"商务逻辑层".在" ...

  • 运维方案计划
  • 运维方案/计划 海淀教育视频平台系统运维服务 北京中科联诚软件股份有限公司 2017年7月27日 目录 第一章:服务内容 ......................................................................................... ...

  • 一个Java程序的执行过程
  • 我们手工执行java程序是这样的: 1 在记事本中或者是UE的文本编辑器中,写好源程序: 2 使用javac命令把源程序编译成.class文件: 编译后的.class(类字节码)文件中会包含以下内容: ConstantPool:符号表: FieldInfo:类中的成员变量信息: MethodInfo ...

  • J2ME技术在手机游戏的发展分析毕业论文
  • J2ME 技术在手机游戏的发展分析毕业论文 目录 摘 要 ...................... 错误!未定义书签. Abstract . ................... 错误!未定义书签. 第1章 绪 论 .............................. 1 第2章 J2 ...