首页 > 解决方案 > 为什么默认的最大堆大小这么小

问题描述

根据oracle 对 java 8 的人体工程学(对于 java 5 及更高版本也是如此),堆在最低的 1Gb 或总物理内存的 1/4 处达到最大值。这是为什么?

我有一个有状态的 Web 服务器,它每天处理来自 1000 多个用户的请求,该服务器在仅启动此应用程序的 VM 上运行。由于遗留原因,此 Web 服务器必须保持有状态,并且 HttpSessions 中保存的对象可能会占用大量内存。因此,1GB 还远远不够。

现代 Web 服务器真的不应该使用超过 1GB 的堆吗?为什么不能使用机器内存的 3/4?

标签: javamemory-managementjvmjvm-argumentsjvm-hotspot

解决方案


堆的最大值为 1Gb 或总物理内存的 1/4 中的最低值。这是为什么?

因为在现代机器上发现 64MB 太少了。

现代 Web 服务器真的不应该使用超过 1GB 的堆吗?

没有理由将通用可执行文件的默认值视为对 Web 服务器的最佳实践有很多话要说。

为什么不能使用机器内存的 3/4?

假设是 java 不是机器上的唯一进程。如果它是机器上最重要的进程并且需要更多内存,用户可以更改默认值。


推荐阅读