[JVM] JVM 종류 - Hotspot vs JRockit

2021. 12. 16. 11:43 JAVA/JVM

JVM에는 여러 종류가 있다.
JVM Specification에 JVM의 기능을 명세한다. JVM Specification을 구현한 여러 JVM이 존재하게된다. 명세서는 구글에 검색하면 언제든지 볼 수 있다. 
JVM 명세서를 구현한 대표적인 JVM으로 Hotspot과 JRockit이 있다.
두 개로 나뉜 이유는 간단히 각각 특화된 부분이 다르기 때문이다.

Hotspot은 클라이언트 용 어플리케이션에 특화되었다. 반면에 JRockit은 서버용 프로세스에 특화되었다. JRockit은 Oracle Weblogic Server의 디폴트 JVM이고, Hotspot은 Java JDK/JRE의 디폴트 JVM이다.

메모리 구조 또한 다르다. 여기서는 그냥 이런게 있구나~하고 넘어가자. 나중에 알게된다.
Hotspot JVM의 메모리는 4부분으로 나뉜다
Perm : 영구적인 저장소. 클래스의 바이너리들이 로딩되는 곳
Eden : 새로운 young 오브젝트들이 시작되는 곳
Survivor space : Minor GC 후에도 남아있는 오브젝트들이 존재하는 곳
Tenured space : 오래사용되는 old한 객체들이 존재하는 곳

JRockit JVM 메모리는 2부분으로 나뉜다
Nursery : young 생성된지 얼마 안된 오브젝트들이 존재하는 곳
Old space : 오래된 오브젝트들이 존재하는 곳

메모리 구조 뿐만 아니라, 모니터링 툴도 다르다. 
사용되는 목적이 다르고, 그에따른 메모리구조도 다르다보니 JVM 의 동작을 모니터링 하는 툴도 다르다. 그렇다면 어떤 JVM을 사용해야 될까??

Hotspot
- Swing과 같은 데스크탑 어플리케이션
- 빠르게 시작되는 JVM

JRockit
- 어플리케이션 서버
- 높은 성능, 느린 부팅
- full 모니터링 시스템이 필요

그렇다면 내가 사용하고있는 JVM이 어떤건지 어떻게 알까??

출력해보면 jvm 종류가 나온다.  (java -version으로 해도 안나올 경우)
Hotspot과 JRockit은 합쳐지고 있다고 한다. 미리합쳐졌으면 둘다 공부 안해도됬을텐데....