1

我们有一个 java 进程,它有这样的 start 参数:-Xms5120m -Xmx5120M

jvm会在启动时分配5G RAM吗?

与 -Xms1024m -Xmx5120M 相比,这是一个好习惯吗?

[更新]

即使我设置了Xms5120M,它似乎也被忽略了。当进程启动时,任务管理器显示它只使用了大约 2G RAM。这是为什么?

4

2 回答 2

0

java 只会分配当时需要的东西。当你告诉它你想要 -Xmx5G 时,它告诉计算机最大。而 xms 是最小系统内存。如果初始内存堆不超过 5G,而是使用 2G,任务管理器只是告诉您 2G 内存正在使用中,但不会显示您的分配。这表明你的内存堆没有消耗全部 5G 分配的内存。

于 2014-01-19T15:21:52.807 回答
0

如果您真的希望立即初始化初始堆内存,您可能可以尝试使用-XX:+AlwaysPreTouchJVM 选项:

在 JVM 初始化期间预接触 Java 堆。因此,堆的每一页在初始化期间都被需求归零,而不是在应用程序执行期间递增。

http://www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html

于 2017-04-16T07:42:59.207 回答