我正在关注这个问题并发现所有信息都已过时.
最新的指南似乎是关于GC调整的文档.在其中,Oracle定义了他们愚蠢的术语人体工程学,我认为这只是合理("舒适")默认值.在该文件中,提到了该文件,该文件在上述SO问题中被大量引用.
它声称最大堆大小计算如下:
较小的物理内存的1/4或1GB.在J2SE 5.0之前,默认的最大堆大小为64MB.您可以使用-Xmx命令行选项覆盖此默认值.
这显然是假的,因为我有一台我测试过的机器有12 GB的RAM和4096 MB,经过验证java -XX:+PrintFlagsFinal -version | grep HeapSize
.但需要注意的是:
注意:为堆大小指定的边界和分数对于J2SE 5.0是正确的.随着计算机变得越来越强大,它们在后续版本中可能会有所不同.
哪个好极了!除了我找不到任何关于此的最新文档.我验证了我在运行这个问题的服务器类.为什么这很重要?因为我的12 GB服务器类机器默认为170 MB.一切都打破了.是的,我知道我可以覆盖它.我宁愿不必在我运行的每个应用程序中复制该覆盖,我宁愿不将其硬编码到pom文件中.更重要的是,这个数字在我的机器上以某种方式随机改变,我需要了解它是如何被碰撞的.
这是我的java版本:
$ java -version java version "1.7.0_04" Java(TM) SE Runtime Environment (build 1.7.0_04-b21) Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
我在Mac OS X 10.9.2上.