JVM启动参数-Xmx的默认值是多少?
1:JVM启动的时候,如果我不加-Xmx参数,可已分配给堆的最大内存是多少?
2:JDK1.5和JDK1.6等不同版本,Xmx参数的默认值是一样的吗?有什么区别?
3:xmx默认值与操作系统类型、位数的关系是怎样的?
4:xmx默认值与-server参数有关系吗?
谷歌了半天,也没找到答案,求大神解答。
HOTSPOT虚拟机,谢谢。
请给出官方文档或者原始出处,多谢。
实际问题:
一个JAVA程序,有内存突增的特点,大约突增到400M左右。WIN7-64位PC,JDK1.6,8G内存,不设置xmx参数,则报堆溢出。设置之后没问题。网上说默认是物理内存四分之一,感觉不太像,特请教不设置的话,默认是多少?为什么报堆溢出错误?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
更新 JDK 1.8 HotSpot的情况如下:
你可以在Linux下执行以下命令查看Xms和Xmx的默认值
java -XX:+PrintFlagsFinal -version | grep HeapSize
另外这是Java8的文档中关于Default Heap Size的描述:点击这里
hotspot虚拟机的默认堆大小如果未指定,他们是根据服务器物理内存计算而来的
client模式下,JVM初始和最大堆大小为:
在物理内存达到192MB之前,JVM最大堆大小为物理内存的一半,否则,在物理内存大于192MB,在到达1GB之前,JVM最大堆大小为物理内存的1/4,大于1GB的物理内存也按1GB计算,举个例子,如果你的电脑内存是128MB,那么最大堆大小就是64MB,如果你的物理内存大于或等于1GB,那么最大堆大小为256MB。
Java初始堆大小是物理内存的1/64,但最小是8MB。
server模式下:
与client模式类似,区别就是默认值可以更大,比如在32位JVM下,如果物理内存在4G或更高,最大堆大小可以提升至1GB,,如果是在64位JVM下,如果物理内存在128GB或更高,最大堆大小可以提升至32GB。
回答你的实际问题: 只有运行在
server
模式下的时候才是min(1G, 物理内存的四分之一)
所以依你的情况应该是1G
的样子 当然别忘了要用java -server <类名>
来启动你的程序 ..你也可以在程序里试试打印
Runtime.getRuntime().maxMemory()
的值 看看是多少Oracle的官方文档没找到,你试试SO回答上的说法把。
http://stackoverflow.com/ques...