j9 이란?

sdk man 으로 설치 가능한 JDK 를 검색하면 다음과 같이 Identifier 에 j9 과 hs 가 붙는 제품들이 있습니다.

$ sdk list java

================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 AdoptOpenJDK  |     | 16.0.1.j9    | adpt    |            | 16.0.1.j9-adpt      
               |     | 16.0.1.hs    | adpt    |            | 16.0.1.hs-adpt      
               |     | 11.0.11.j9   | adpt    |            | 11.0.11.j9-adpt     
               |     | 11.0.11.hs   | adpt    |            | 11.0.11.hs-adpt     
               |     | 8.0.292.j9   | adpt    |            | 8.0.292.j9-adpt     
               |     | 8.0.292.hs   | adpt    |            | 8.0.292.hs-adpt     
 Corretto      |     | 16.0.2.7.1   | amzn    |            | 16.0.2.7.1-amzn     
               |     | 11.0.12.7.1  | amzn    |            | 11.0.12.7.1-amzn    
               |     | 8.302.08.1   | amzn    |            | 8.302.08.1-amzn
BASH

j9 은 JVM 의 또 다른 구현물로 eclipse 재단에서 개발했으며 재단의 OpenJDK 구현물인 AdoptOpenJDK 에 적용되어 있습니다.


기존 HotSpot(hs) 방식의 JVM 과 달리 Cloud 환경에 최적화 되어 있으며 더 빠르고 효율적으로 동작한다고 재단은 주장하고 있습니다. (성능 비교표 보기)


주의할 점은 j9 은 JVM 의 또 다른 구현물이며 JDK 의 버전과는 바로 매칭되지 않으며 AdoptOpenJDK 는 2 개의 JVM(j9, hs) 이 따로 패키징 되어 있습니다.

즉 "JDK 11 ➕  j9 JVM" 구성이나 "JDK 11 ➕ hs JVM" 구성이 가능하며 sdk man 에서 보는 Identifier 를 통해서도 확인할 수 있습니다.


개인적인 생각으로는 Cloud 에서 Java 로 개발한 app 을 서비스한다면 Cloud 서비스 업체가 구현한 JDK(JVM) 가 가장 최적화되어 있지 않을까 생각되며 저도 그렇게 사용하고 있습니다.


즉 AWS 를 쓴다면 Amazon 의 JDK인 Corretto를 사용하고 Azure 에서는 Microsoft 의 OpenJDK 를 쓰려고 합니다.

같이 보기


Ref