Java 人体工程学 : how are defaults calculated?

标签 java memory garbage-collection heap-size

我正在关注 this question并发现所有信息都已过时。

The most up-to-date guide seems to be this document regarding GC tuning .甲骨文在其中定义了他们愚蠢的术语人体工程学,我认为它只是意味着合理的(“舒适的”)默认值。在该文档中,this document is referred to ,在上述 SO 问题中被大量引用。

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

Smaller of 1/4th of the physical memory or 1GB. Before J2SE 5.0, the default maximum heap size was 64MB. You can override this default using the -Xmx command-line option.

这显然是错误的,因为我测试过的机器有 12 GB RAM 和 4096 MB,已通过 java -XX:+PrintFlagsFinal -version | 验证。 grep 堆大小。但包括警告:

Note: The boundaries and fractions given for the heap size are correct for J2SE 5.0. They are likely to be different in subsequent releases as computers get more powerful.

太棒了!除了我找不到任何关于此的最新文档。 我确认我正在运行服务器级 per this question .为什么这很重要? 因为我的 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(和其他调整)有助于在所有环境中具有相同的行为(dev/prod 经常有不同的硬件配置)

关于Java 人体工程学 : how are defaults calculated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481455/

相关文章:

java - 如何正确使用 "PBEWithHmacSHA512AndAES_256"算法?

java - Google Voice 接收新来电通知

java - Spring Security 安全自定义页面

matlab中没有释放内存?

.net - 为什么这些WCF相关资源没有被清理掉?

ruby-on-rails - Ruby on Rails 中的垃圾收集器?

java - 如何让我的 TreeCellRenderer 填充我的 JTree?

c++ - 如何确定 C++ 中对象的大小?

java - Android ListActivity 与位图和垃圾收集问题

python - 在 Python 中 : How to remove an object from a list if it is only referenced in that list?