Java人体工程学:如何计算默认值?

dje*_*lin 5 java memory garbage-collection heap-size

我正在关注这个问题并发现所有信息都已过时.

最新的指南似乎是关于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)
Run Code Online (Sandbox Code Playgroud)

我在Mac OS X 10.9.2上.

mco*_*ive 1

你说得对。有关 Java 内存管理的文档既过时也不完整:Xmx 只是一个示例。

我做了同样的观察,并改变了我的行为:我总是指定 Xmx。

在我看来,这不是问题。Java 程序所需的内存不应取决于您的硬件。此外,我认为这是一个很好的做法:在脚本/配方中明确指定 Xmx (和其他调整)有助于在所有环境中具有相同的行为(开发/产品经常具有不同的硬件配置)