Open J9
OpenJ9원저작자 | IBM |
---|---|
개발자 | 이클립스 재단 |
안정된 릴리스 | 2022년 8월 5일 / 0.33.0[1], 전 |
저장소 | |
기입처 | C, C++, Java, 어셈블리 |
운영 체제 | Linux, AIX, Windows, macOS, z/OS, IBM i |
유형 | Java 가상 머신 |
면허증. | Apache 라이센스 2.0 GNU General Public License 버전 2, GNU Classpath 예외 포함 GNU General Public License 버전 2 (OpenJDK 어셈블리[2] 예외 포함) |
웹 사이트 | www![]() |
Eclipse OpenJ9(이전의 IBM J9)는 Java Virtual Machine [3]Specification을 완벽하게 준수하는 확장 가능한 고성능 Java Virtual Machine(JVM) 구현입니다.
OpenJ9은 소스에서 빌드할 수도 있고 Adapt Open에서 사용할 수 있는 사전 빌드 바이너리와 함께 사용할 수도 있습니다.Linux 및 Windows를 [4]포함한 많은 플랫폼용 JDK 프로젝트.OpenJ9은 WebSphere Application Server 및 Websphere Liberty를 비롯한 많은 IBM 미들웨어 제품에 내장된 IBM 개발자 키트의 핵심 구성요소이기도 합니다.OpenJ9은 Open [5]Liberty의 컴포넌트이기도 합니다.
광범위한 구성 옵션을 통해 메인프레임 하드웨어에서 실행되는 복잡한 엔터프라이즈 애플리케이션부터 컨테이너 기반 클라우드 서비스에서 실행되는 단수명 애플리케이션까지 다양한 Java 애플리케이션의 요구사항을 충족하도록 JVM을 조정할 수 있습니다.
역사
OpenJ9은 OTI(Object Technology International)가 개발한 ENVY/Smalltalk 제품에 뿌리를 두고 있습니다.IBM은 1996년에 Smalltalk 전문 지식과 제품을 위해 OTI를 구입했습니다.그러나 Java 언어가 엔터프라이즈 시장의 주요 언어로 떠오르자 기존 Smalltalk VM은 Java 바이트코드를 대신 처리하도록 조정되었습니다.J9이라는 이름은 Smalltalk 소스 코드의 명명 규칙인 K8. K→J(후진 단계)에서 유래했습니다. 개발자들은 Smalltalk가 Java보다 낫다고 믿었기 때문입니다. 그러나 8→9(앞으로 나아가는 단계)는 새로운 VM이 [6]이전보다 더 낫다고 믿었기 때문입니다.
J9 JVM은 고성능, 확장성 및 안정성으로 명성을 쌓아온 IBM의 많은 엔터프라이즈 미들웨어 제품의 런타임 엔진이 되었습니다.
2017년 J9은 Eclipse OpenJ9이라는 이름으로 Eclipse Foundation 프로젝트가 되었습니다.IBM은 계속해서 프로젝트에 적극적으로 참여하고 있으며, Java VM을 많은 소프트웨어 오퍼링의 핵심에 두고 있습니다.Eclipse Foundation에서 OpenJ9은 인큐베이터 프로젝트로 분류되며 첫 번째 릴리스인 v0.8.0은 2018년에 제공됩니다.
특징들
Eclipse OpenJ9 JVM은 Java JVM 사양을 완벽하게 준수합니다.OpenJDK 8 이후의 릴리스에서는 동일한 버전의 JVM을 사용할 수 있습니다.즉, 다양한 버전의 Java에서 실행되는 애플리케이션에 의해 많은 기능과 향상된 기능을 이용할 수 있습니다.Oracle의 HotSpot VM에 비해 OpenJ9은 전체 처리량과 [7]유사한 시작 성능과 메모리 소비량을 자랑합니다.
Eclipse OpenJ9에는 다양한 프로그래밍 언어의 런타임 환경을 구축하는 데 사용할 수 있는 핵심 런타임 구성 요소를 제공하는 Eclipse OMR이 포함되어 있습니다.OpenJ9 프로젝트에서는 추가 코드 계층이 Java 응용 프로그램에 런타임 환경을 [8]제공하기 위해 언어 의미론을 추가합니다.
Eclipse OpenJ9을 구성하는 구성 요소는 다음 섹션에서 설명합니다.
JIT 컴파일러
JIT(Just-In-Time)는 플랫폼 중립 Java 바이트 코드를 런타임에 네이티브 머신 코드로 컴파일하여 Java 애플리케이션의 성능을 향상시킵니다.응용 프로그램에서 호출되는 모든 메서드가 컴파일되는 것은 아닙니다.대신 OpenJ9은 메서드가 호출된 횟수를 기록하고 미리 정의된 임계값으로 JIT 컴파일을 트리거합니다.JIT 컴파일러는 cold, warm, hot, very hot(프로파일링 포함) 또는 thotning(태양) 등 다양한 최적화 수준에서 메서드를 컴파일합니다.최적화 레벨이 높을수록 기대 성능은 좋아지지만 CPU와 메모리 측면에서 비용은 높아집니다.최적화 레벨이 높을수록 이스케이프 분석이나 부분 용장성 제거 등의 특수한 기술을 사용하거나 특정 최적화 시퀀스를 여러 번 루프합니다.이러한 기술은 더 많은 CPU와 메모리를 사용하지만 최적화를 통해 제공되는 향상된 성능을 통해 균형을 유지할 수 있습니다.
AOT 컴파일러
AOT 컴파일은 스타트업 퍼포먼스를 향상시키는 메커니즘입니다.런타임에 메서드가 동적으로 AOT 코드로 컴파일되므로 JVM이 애플리케이션을 더 빨리 시작할 수 있습니다.AOT는 클래스 데이터 공유(-Xshare classes)가 사용되고 특별한 튜닝이 필요하지 않을 때 자동으로 활성화됩니다.OpenJ9은 대규모 애플리케이션의 시작 단계를 식별하는 휴리스틱을 기반으로 컴파일할 방법을 자동으로 선택합니다.소규모 또는 단기 실행 애플리케이션의 경우 -Xtune:virtualized 옵션을 추가하여 AOT 컴파일된 코드를 최대한 활용해야 합니다.
클래스 데이터 공유
JVM 간의 클래스 데이터 공유에는 두 가지 주요 이점이 있습니다.
- 시작 성능은 애플리케이션이 초기화할 때 필요한 클래스를 공유 클래스 캐시에 배치함으로써 향상됩니다.
- 별도의 Java VM에서 실행되는 애플리케이션 간에 공통 클래스를 공유함으로써 메모리 설치 공간을 줄일 수 있습니다.
다른 Class Data Sharing(CDS; 클래스 데이터 공유) 구현과 달리 OpenJ9에서 이 기능을 활성화하려면 응용 프로그램을 시작할 때 명령줄에서 -Xshare classes 설정만 하면 됩니다.지정하면 OpenJ9은 메모리 맵파일을 생성하여 클래스를 메모리에 저장하고 공유합니다.기본적으로 OpenJ9은 항상 기본 시스템 클래스 로더에 의해 로드되는 부트스트랩과 응용 프로그램클래스를 공유합니다.OpenJ9 CDS 구현의 또 다른 장점은 캐시가 동적으로 업데이트된다는 것입니다.따라서 애플리케이션이 새 클래스를 로드하면 JVM은 사용자 [9]개입 없이 자동으로 해당 클래스를 캐시에 저장합니다.
OpenJ9은 클래스 공유 지원을 커스텀클래스 로더에 통합하기 위한 퍼블릭헬퍼 API와 액티브캐시 관리를 위한 몇 가지 유틸리티도 제공합니다.
가비지 콜렉터
응용 프로그램의 메모리 부족을 방지하려면 Java 힙에서 더 이상 필요하지 않은 개체를 회수해야 합니다.이 프로세스를 GC(가비지 컬렉션)라고 합니다.OpenJ9은 다양한 유형의 애플리케이션과 워크로드를 중심으로 설계된 여러 가비지 컬렉션 정책을 제공합니다.올바른 정책 선택은 사용 및 성능 목표에 따라 달라집니다.기본적으로 OpenJ9은 Generation Concurrent(세대 동시)를 사용합니다.-Xgcpolicy:gencon
) 정책은 수명이 짧은 오브젝트가 많은 트랜잭션응용 프로그램에 가장 적합합니다.Java 힙이 큰 애플리케이션을 지원하는 정책을 포함하여 대체 정책을 사용할 수 있습니다.-Xgcpolicy:balanced
응답 시간에 민감한 응용 프로그램(-Xgcpolicy:metronome
또는 높은 애플리케이션 스루풋을 필요로 하는 애플리케이션(-Xgcpolicy:optthruput
).
'아이돌 튜닝'아이돌 튜닝')-XX:+IdleTuningGcOnIdle
응용 프로그램이 유휴 상태일 때 OpenJ9에서 가비지 컬렉션을 트리거합니다.이를 통해 메모리 설치 공간을 줄일 수 있으며, 일부 가상 호스팅 [7]과금 계획에서 의미가 있습니다.
JIT 서버
2020년 1월 OpenJ9은 JVM 외부 및 서버상의 원격 JIT 컴파일 코드에 실험적인 기능을 제공했습니다.
진단 컴포넌트
OpenJ9에는 런타임 문제를 식별, 격리 및 해결하는 데 도움이 되는 광범위한 추적 및 디버깅 유틸리티가 포함되어 있습니다.특정 이벤트가 발생하면 기본적으로 여러 유형의 진단 데이터가 자동으로 생성되지만 명령줄에서 트리거될 수도 있습니다.데이터 유형은 다음과 같습니다.
- 자바 덤프
- 운영체제 신호, Out Of Memory Error 예외 또는 사용자가 시작한 키 입력 조합으로 인해 JVM이 예기치 않게 종료되었을 때 생성됩니다.Java 덤프는 이벤트가 발생했을 때의 JVM 상태를 JVM의 컴포넌트와 관련된 대부분의 정보와 함께 요약합니다.
- 힙 덤프
- 힙 덤프는 Out Of Memory Error 예외로 인해 JVM이 종료되거나 사용자가 요청할 때 Java 힙에 있는 모든 활성 개체를 표시합니다.이 정보에는 개체 주소, 유형 또는 클래스 이름, 크기 및 다른 개체에 대한 참조가 포함됩니다.힙 덤프를 분석하면 Java 힙에서 대용량 메모리를 사용하는 개체와 이러한 개체가 가비지 수집되지 않는 이유를 알 수 있습니다.
- 시스템 덤프
- 코어 덤프라고 불리는 것은 플랫폼 고유의 것으로 프로세스 메모리의 원시 바이너리 덤프를 포함하고 있습니다.이 덤프에는 애플리케이션 내의 모든 Java 객체의 내용을 포함한 Java 힙의 완전한 복사본이 있습니다.OpenJ9 도구는 분석을 위해 시스템 덤프를 읽을 수 있는 형식으로 처리하는 데 사용할 수 있습니다.
- 가비지 컬렉션 데이터
- 가비지 수집 문제를 분석하려면 상세 로깅을 사용하도록 설정하면 초기화, 월드 처리 중지, 최종화, 참조 처리 및 할당 실패를 포함한 모든 가비지 수집 작업에 대한 데이터를 제공합니다.보다 자세한 분석을 위해 가비지 수집 추적을 설정할 수 있습니다.
- 트레이스 데이터
- OpenJ9 트레이스 기능을 사용하여 애플리케이션, Java 메서드 또는 내부 JVM 작업을 추적하고 성능에 미치는 영향을 최소화할 수 있습니다.
- JIT 데이터
- 일반적인 보호 장애 또는 중단 이벤트가 발생하면 JIT는 OpenJ9 개발자가 분석할 수 있는 작은 바이너리 덤프를 생성하여 근본 원인을 파악합니다.
- 공유 클래스 데이터
- 공유 클래스 데이터 구성 요소는 런타임에 캐시 활동을 표시하는 데 사용할 수 있는 몇 가지 세부 옵션을 제공합니다.printStats 및 printAllStats 유틸리티를 사용하면 공유 클래스 캐시의 내용을 분석할 수 있습니다.
진단 구성 요소에는 진단 도구를 구축하는 데 사용할 수 있는 DTFJ 애플리케이션 프로그래밍 인터페이스도 포함되어 있습니다.DTFJ는 시스템 덤프 또는 Java 덤프의 데이터로 동작합니다.
도입
오픈 채택JDK:OpenJ9을탑재한 OpenJDK커뮤니티빌드는AdaptOpen에서구축및테스트됩니다.JDK 프로젝트(폐지:[10] Semeru로 IBM으로 이전).- IBM:
- OpenJ9은 IBM SDK Java Technology Edition 버전 8의 구성요소입니다.
- 오픈 채택OpenJ9 커뮤니티 빌드를 사용하는 JDK OpenJDK는 이제 IBM Semeru로 구축, 테스트 및 배포됩니다.
- Apache OpenWhisk: OpenWhisk는 OpenJ9을 [11]액션의 JVM으로 사용하고 있습니다.
- Eclipse IDE: Eclipse Foundation은 OpenJDK 8을 OpenJ9과 함께 Eclipse 통합 개발 환경(IDE)에 포함시키는 것을 승인했습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Releases · eclipse/openj9". GitHub. Retrieved 2022-08-06.
- ^ "openj9/LICENSE at openj9-0.24.0 · eclipse/openj9". GitHub. Retrieved 6 March 2021.
- ^ Leonardo Zanivan (7 February 2018). "New Open Source JVM optimized for Cloud and Microservices". medium.
- ^ Holger Voormann (14 March 2018). "Hello OpenJ9 on Windows, I Didn't Expect You So Soon!". DZone.
- ^ David Rubinstein (20 September 2017). "IBM releases WebSphere Liberty code to open source". SD Times.
- ^ Ronald Servant (18 September 2017). "How did the J9 in OpenJ9 get its name". medium.
- ^ a b Dan Heidinga (6 June 2018). "Eclipse OpenJ9; not just any Java Virtual Machine". JAXenter.
- ^ Monica Beckwith (1 March 2018). "Eclipse OpenJ9 - an Open Source Java Virtual Machine Based on the Eclipse OMR Project". InfoQ.
- ^ Corrie, Ben; Shao, Hang (6 June 2018). "Class sharing in Eclipse OpenJ9". IBM developerWorks.
- ^ srcset="/static/178d962fdbafec7cd7d414606b72a2fc/58a4b/tsc.jpg 1x, Technical Steering Committee <picture><source; Static/178d962fdbafec7cd7d414606b72a2fc/F8771/Tsc.jpg 1.5x; Srcset="/Static/178d962fdbafec7cd7d414606b72a2fc/58a4b/Tsc.jpg 1x, Static/178d962fdbafec7cd7d414606b72a2fc/56ed0/Tsc jpg 2x" /><img Loading="lazy" Width="30" Height="30"; Static/178d962fdbafec7cd7d414606b72a2fc/F8771/Tsc.jpg 1.5x; Style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-Fit:cover;object-Position:center"/></Picture>, Static/178d962fdbafec7cd7d414606b72a2fc/56ed0/Tsc jpg 2x" Src="/Static/178d962fdbafec7cd7d414606b72a2fc/58a4b/Tsc jpg" Alt="". "AdoptOpenJDK to join the Eclipse Foundation". blog.adoptopenjdk.net. Retrieved 2021-12-21.
{{cite web}}
: CS1 maint: 여러 이름: 작성자 목록(링크) - ^ Parameswaran Selvam (9 March 2018). "Apache OpenWhisk Java actions on Eclipse OpenJ9 Runtime". medium.
외부 링크
- 공식 웹사이트
- Eclipse Foundation OpenJ9 프로젝트 페이지
- GitHub의 openj9
- OpenJ9 블로그
- Ubi Comp:해킹:Java: Washington Computer Science and Engineering 대학 J9