Java 도움말에 나와 있는 것처럼 동일한 -Xms 및 -Xmx를 사용하여 Java 프로세스를 시작하는 것에 대한 귀하의 의견을 묻고 싶습니다.
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
내부에Java VM 성능 팁/지침-Xms에 대한 제안이 있습니다.
"오라클은 가비지 수집을 최소화하기 위해 최소 힙 크기(-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를 시도하고 힙을 계속해서 늘리는 것보다 즉시 예약하는 것이 더 빠릅니다.