我们有一个java进程,它有这样的启动参数:-Xms5120m -Xmx5120M
jvm会在启动时分配5G内存吗?
与-Xms1024m -Xmx5120M相比,这是一种很好的做法吗?
更新
即使我设置了Xms5120M,它似乎也会被忽略。当进程开始时,任务管理器显示它只使用了大约2G的RAM。为什么会这样呢?
发布于 2014-01-19 23:21:53
java只会在此时分配所需的资源。当你告诉它你想要-Xmx5G时,这是在告诉计算机最大值。而xms是最小的系统内存。如果初始内存堆没有超过5G,而是使用2G,任务管理器只是简单地告诉您2G的内存正在使用中,但不会显示您的分配情况。这表明您的内存堆没有消耗全部5G的已分配内存。
发布于 2017-04-16 15:42:59
如果您确实希望立即初始化初始堆内存,您可能可以尝试-XX:+AlwaysPreTouch JVM选项:
在
初始化期间,JVM预先接触Java heap。因此,堆的每一页在初始化期间都被要求清零,而不是在应用程序执行期间递增地清零。
http://www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html
https://stackoverflow.com/questions/10342841
复制相似问题