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

Java人体工程学:如何计算默认值?,java,memory,garbage-collection,heap-size,Java,Memory,Garbage Collection,Heap Size,我在跟踪,发现所有的信息都过时了 。甲骨文在书中定义了他们愚蠢的术语“人体工程学”,我认为它只是指合理(“舒适”)的默认值。该文件在上述问题中大量引用 它声称最大堆大小的计算如下: 物理内存的1/4或1GB中的较小者。在J2SE5.0之前,默认的最大堆大小是64MB。您可以使用-Xmx命令行选项覆盖此默认值 这显然是错误的,因为我测试过一台机器,它有12GB的RAM和4096MB,这是通过java-XX:+PrintFlagsFinal-version | grep HeapSize验证的。但警

我在跟踪,发现所有的信息都过时了

。甲骨文在书中定义了他们愚蠢的术语“人体工程学”,我认为它只是指合理(“舒适”)的默认值。该文件在上述问题中大量引用

它声称最大堆大小的计算如下:

物理内存的1/4或1GB中的较小者。在J2SE5.0之前,默认的最大堆大小是64MB。您可以使用-Xmx命令行选项覆盖此默认值

这显然是错误的,因为我测试过一台机器,它有12GB的RAM和4096MB,这是通过
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。

你说得对。关于Java内存管理的文档已经过时,也不完整:Xmx只是一个例子

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


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

@ElliottFrisch good point,added@ElliottFrisch好啊但是在这个文档中没有任何帮助。我必须启动的每一个java tomcat/eclipse/等,我都会亲自将-Xmx=2g添加到配置中,或者在java_OPTS中设置它。这是一个小小的代价来换取心灵的平静