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