当前位置: 代码迷 >> J2SE >> 请问一下关于JVM内存的有关问题
  详细解决方案

请问一下关于JVM内存的有关问题

热度:77   发布时间:2016-04-23 20:50:49.0
请教一下关于JVM内存的问题。
本帖最后由 qunhao 于 2014-04-15 08:51:12 编辑
Runtime t = Runtime.getRuntime();
System.out.println(t.totalMemory() / 1024 / 1024);
System.out.println(t.maxMemory() / 1024 / 1024);
环境:Win7 64位,4G内存,JDK7,HotSpot VM
没有设置JVM参数的情况打印如下:
15
247
第一个问题:这两个默认值不同环境下是不是打印的不一样?有没有什么规则可以算出来这个默认值的或者说是什么因素在影响这个默认值?

设置JVM参数-Xmx1000m -Xms500m打印如下:
483
966
第二个问题:我的理解-Xmx设置堆内存最大值,maxMemory()返回堆内存可使用最大值,难道是我理解有误,不然为什么会设置和打印的不一样?
------解决方案--------------------
不懂帮顶,我擦,还要6个字符
------解决方案--------------------
totalMemory()返回的是当前JVM进程目前可用的内存空间,maxMemory()返回的是当前JVM进程最大可用的内存空间(已用+当前可用),maxMemory()返回的值对应的应该是-Xmx设置的值。

所没有手动设置内存参数,则依不同机器不同环境而不同。
------解决方案--------------------
问题一:
一般来说 -Xms 是物理内存 1/64,-Xmx是物理内存 1/4,23bit下均不超过1G。
但是不同版本虚拟机在不同的操作系统环境下会存在少量不同,比如:
http://publib.boulder.ibm.com/infocenter/javasdk/v1r4m2/index.jsp?topic=%2Fcom.ibm.java.doc.diagnostics.142%2Fhtml%2Fappendix_e.html


问题二:
还是JVM相关,参见:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4391499
  相关解决方案