我正在关注这个问题,发现所有信息都已过时。
最新的指南似乎是有关 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 上。