我想询问您对使用相同的 -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、增加堆。