-XMS
- Java 프로세스에서 사용 가능한 최소 힙 크기를 설정
- 설정하지 않으면 Xmx 와 동일하게 설정
-XMX
- Java 프로세스에서 사용 가능한 최대 힙 크기 설정
- 설정하지 않으면 기본적으로 시스템 물리적 메모리 크기에 따라 결정
즉, Java heap 메모리는 -Xms 로 지정한 메모리 크기로 시작하여 -Xmx 로 지정한 메모리 크키까지 커지게 된다.
XMX와 XMS는 왜 지정해야할까?
JVM은 메모리가 부족하게 되면 OS에 메모리를 추가 요청하는 방식으로 힙 사이즈를 조정한다. 이때 GC가 발생하게 되고, JVM은 필요한만큼 힙 사이즈를 늘려가게 된다. 이렇게 조정하다가 만약 머신의 물리 메모리 사이즈를 넘어가게 되면 가상 메모리를 사용하면서 swap space로 swap in-out을 하게 된다.
XMS, XMX는 왜 같은 값으로 지정하는 걸까?
같은 값을 준다는 것은 처음부터 최대 크기의 heap 메모리를 사용하겠다는 의미이다.
이유는 성능 때문이다.
- 적은 값의 -Xms 옵션으로 Java를 실행하게 되면, 결국 더 자주 GC를 발생시키게 된다. 이를 통해 성능적인 이슈가 있을 수 있다.
- 또한, Java 프로그램의 Heap 메모리 사용량이 -Xms에 다다르면 OS에게 추가적인 메모리 할당을 요구하게 된다. 이렇게 해서 -Xmx 옵션으로 지정한 메모리 크기까지 메모리 할당을 받을 수 있는 것인데, OS에게 메모리 할당하는 부분에서 추가적인 시간이 필요하고 이 부분에서 성능적인 이슈가 발생할 수 있다.
=> 그렇기 때문에 사용환경에서는 처음부터 -Xmx으로 지정한 Heap 메모리 크기를 가지고 시작하는 좋기 때문에 메모리 크기를 같게 하는 것이다.