![javavm 초기 및 최대 힙 크기가 동일한 큰 값으로 설정됨](https://linux55.com/image/142912/javavm%20%EC%B4%88%EA%B8%B0%20%EB%B0%8F%20%EC%B5%9C%EB%8C%80%20%ED%9E%99%20%ED%81%AC%EA%B8%B0%EA%B0%80%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%ED%81%B0%20%EA%B0%92%EC%9C%BC%EB%A1%9C%20%EC%84%A4%EC%A0%95%EB%90%A8.png)
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를 시도하고 힙을 계속해서 늘리는 것보다 즉시 예약하는 것이 더 빠릅니다.