我们有一个 java 进程,它有这样的 start 参数:-Xms5120m -Xmx5120M
jvm会在启动时分配5G RAM吗?
与 -Xms1024m -Xmx5120M 相比,这是一个好习惯吗?
[更新]
即使我设置了Xms5120M,它似乎也被忽略了。当进程启动时,任务管理器显示它只使用了大约 2G RAM。这是为什么?
java 只会分配当时需要的东西。当你告诉它你想要 -Xmx5G 时,它告诉计算机最大。而 xms 是最小系统内存。如果初始内存堆不超过 5G,而是使用 2G,任务管理器只是告诉您 2G 内存正在使用中,但不会显示您的分配。这表明你的内存堆没有消耗全部 5G 分配的内存。
如果您真的希望立即初始化初始堆内存,您可能可以尝试使用-XX:+AlwaysPreTouch
JVM 选项:
在 JVM 初始化期间预接触 Java 堆。因此,堆的每一页在初始化期间都被需求归零,而不是在应用程序执行期间递增。
http://www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html