请教一下关于JVM内存的问题。

qunhao 2014-04-14 11:22:13
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()返回堆内存可使用最大值,难道是我理解有误,不然为什么会设置和打印的不一样?
...全文
255 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2014-04-15
  • 打赏
  • 举报
回复
问题一: 一般来说 -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
zzwab99 2014-04-15
  • 打赏
  • 举报
回复
totalMemory()返回的是当前JVM进程目前可用的内存空间,maxMemory()返回的是当前JVM进程最大可用的内存空间(已用+当前可用),maxMemory()返回的值对应的应该是-Xmx设置的值。 所没有手动设置内存参数,则依不同机器不同环境而不同。
huilangeliuxin 2014-04-15
  • 打赏
  • 举报
回复
不懂帮顶,我擦,还要6个字符
qunhao 2014-04-15
  • 打赏
  • 举报
回复

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧