在此之前,还是先看下JVM内存结构和JVM参数调优,网上太多不说也罢。

另外提醒的是方法反映的都是java这个进程的内存情况,跟操作系统的内存根本没有关系。

public class Test {

public static void main(String[] args) {

System.out.println(Runtime.getRuntime().freeMemory()/1024/1024 + " M");

System.out.println(Runtime.getRuntime().totalMemory()/1024/1024 + " M");

System.out.println(Runtime.getRuntime().maxMemory()/1024/1024 + " M");

}

}

三个值的解释:

A.maxMemory()这个方法返回的是java虚拟机(这个进程)能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程序的时候,没有添加-Xmx参数,那么就是64兆,也就是说maxMemory()返回的大约是64*1024*1024字节,这是java虚拟机默认情况下能从操作系统那里挖到的最大的内存。如果添加了-Xmx参数,将以这个参数后面的值为准,例如java -cp ClassPath -Xmx512m ClassName,那么最大内存就是512*1024*0124字节。

B.totalMemory()这个方法返回的是java虚拟机现在已经从操作系统那里挖过来的内存大小,也就是java虚拟机这个进程当时所占用的所有内存。如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,直挖到maxMemory()为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,程序在启动的时候就会无条件的从操作系统中挖-Xms后面定义的内存数,然后在这些内存用的差不多的时候,再去挖。

C.freeMemory()是什么呢,刚才讲到如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,但是java虚拟机100%的情况下是会稍微多挖一点的,这些挖过来而又没有用上的内存,实际上就是freeMemory(),所以freeMemory()的值一般情况下都是很小的,但是如果你在运行java程序的时候使用了-Xms,这个时候因为程序在启动的时候就会无条件的从操作系统中挖-Xms后面定义的内存数,这个时候,挖过来的内存可能大部分没用上,所以这个时候freeMemory()可能会有些大。

java 内存情况_Java代码中获取运行时内存情况相关推荐

  1. 显示android 运行时异常,在android中获取运行时异常

    我做了一个简单的android应用程序,从一个活动移动到另一个活动,长度为5个编辑文本输入.但我得到了例外.我附加了两个java文件(MainActicity和Another),mainfest文件和 ...

  2. Windows 8 中的运行时内存减少

    Windows 8 的运行时内存使用是确定 Windows 8 系统要求以及将承载 Windows 8 的大量设备类型的一个重要因素.如您所知,我们要在基于 SoC 的低功耗设备上交付完整的 Wind ...

  3. java输出日志_java代码中如何正确使用loggger日志输出

    java代码中如何正确使用loggger日志输出 发布时间:2019-06-28作者:spider阅读(2980) 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统, ...

  4. asm 5 java,java – 使用ASM(5.x)在字节代码中检测运行时的递归方法调用:howto?

    问题如下; Java代码中的方法是: Rule foo() { return sequence(foo(), x()); } 这将引发解析循环,当然应该避免;但是,这是合法的: Rule foo() ...

  5. java 读取 指纹_java代码怎么获取数字的证书那一串20位指纹?

    展开全部 通过JAVA来读取数字证书的方法获取20位指纹: CARead.java文件代码32313133353236313431303231363533e4b893e5b19e31333339663 ...

  6. Java页码超出_java - 表中的页码 - 堆栈内存溢出

    为此,创建一个文本运行,并在这些文本运行中插入字段"PAGE \\\\* MERGEFORMAT"和/或"NUMPAGES \\\\* MERGEFORMAT" ...

  7. java result元素_Java JDBC 中获取 ResultSet 的大小

    当我们执行完一条Sql语句,获取到一个 ResultSet 对象后,有时我们需要立即知道到底返回了多少个元素,但是 ResultSet 并没有提供一个 size() 方法 or length 的属性, ...

  8. python 内存分析工具_[转] python运行时内存分析工具meliae

    meliae是一个python进程内存占用监控.分析工具,它的安装需要依赖pyrex包. 一.安装: 安装python内存分析工具 sudo pip install cython sudo pip i ...

  9. 深入理解java虚拟机一 JAVA运行时内存区域与class文件

    一 JAVA运行时内存区域 JVM在加载class文件时,会将class文件定义的数据结构转为运行时内存中的数据,那么jvm是如何安排运行时的内存区域呢? jvm将运行时内存划分为以下几个部分: 堆: ...

最新文章

  1. 科技公司合作伙伴清单
  2. javascript 回调函数
  3. 问题: springboot返回登录失败
  4. 3分钟看完Build2016 Day 1 Keynote
  5. 怎么在mysql中打开表存信息,我应该如何存储用户的“收藏夹”在mySQL表?
  6. 超链接标签/<a>标签
  7. python getopterror_python3 getopt用法
  8. 优先级调度算法实现_React17新特性:启发式更新算法
  9. OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(Shell说明)
  10. python tree 库_Python——tree
  11. NYOJ-769乘数密码,逆元解法;
  12. nanohttpd:实现跨域(CORS)请求
  13. 带阵列卡的服务器如何装系统,带阵列卡的服务器能不能做ghost
  14. 新生儿的一类(免费)疫苗(截止2019年)
  15. HALCON_XLD轮廓算子_二
  16. angular : 自定义组件双向绑定 [(ngModel)]
  17. Pythone(学习笔记) Request 豆瓣网页排行榜
  18. 统计项目代码行数 intelliJ idea statistic 插件
  19. 卡那霉素(Kanamycin偶联卵清白蛋白 (KAN-OVA)
  20. 鸿蒙操作系统细节曝光,华为鸿蒙系统细节曝光 UI 重绘动画多 / 系统简介更流畅...

热门文章

  1. Python中使用xpath获取select option的每一行的text和value
  2. shell调用hive客户端导致nohup后台进程stopped
  3. Oracle索引扫描方式
  4. linux svn删除目录命令,删除目录下的所有.svn版本库目录_CentOS
  5. CentOS 8安装Redis的两种方式
  6. Java中判断字符串是否为数字
  7. Java中double类型四舍五入的方法总结
  8. 红帽7.1安装Zabbix 3.4
  9. malloc calloc realloc
  10. 一文看懂机器视觉工业相机与普通相机的区别