javavm 初始和最大堆大小设置为相同的巨大值

javavm 初始和最大堆大小设置为相同的巨大值

我想询问您对使用相同的 -Xms 和 -Xmx 启动 java 进程的看法,正如 java 的帮助所说:

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size

在里面java VM 性能提示/指南有一个关于 -Xms 的建议:

“Oracle 建议将最小堆大小 (-Xms) 设置为等于最大堆大小 (-Xmx),以最大限度地减少垃圾收集。”

只是为了测试,在安装了 64GB RAM 的系统上,我使用 -Xms50g 和 -Xmx50g 启动了 java 进程

我是否应该期望免费输出的“已用”价值增长至 50GB?它似乎并没有成长——或者这是一个漫长的过程?

$ while true;do free|grep ^Mem;sleep 1;done|ts '[%Y-%m-%d %H:%M:%S]'
[2018-12-01 22:03:08] Mem:       65808916     3345712    56556376       14556     5906828    61863688
[2018-12-01 22:03:09] Mem:       65808916     3347912    56554168       14556     5906836    61861484
[2018-12-01 22:03:10] Mem:       65808916     3347776    56554292       14556     5906848    61861608
[2018-12-01 22:03:11] Mem:       65808916     3348008    56554060       14556     5906848    61861376
[2018-12-01 22:03:12] Mem:       65808916     3347780    56554284       14556     5906852    61861600
[2018-12-01 22:03:13] Mem:       65808916     3348112    56553944       14556     5906860    61861260
[2018-12-01 22:03:14] Mem:       65808916     3347976    56554076       14556     5906864    61861392
[2018-12-01 22:03:15] Mem:       65808916     3347636    56554416       14556     5906864    61861736

将 -Xms/-Xmx 设置为如此大的值有什么好处/坏处?

答案1

当进程确实需要该数量时,立即保留它会更快,而不是一次又一次地突破限制、尝试 GC、增加堆。

相关内容