jgwk

tiered compilation 본문

java

tiered compilation

JungleWalker 2022. 12. 15. 13:54

용어가 뒤죽박죽이다.

용어는 사용하는 문맥에 따라 조금씩 다른가보다. 이걸 정리를 해서 적고 싶은데 잘 모르겠다.

본대로 적고 남기니 언젠가는 정리를 할지도...

 

Hotspot 계열 runtime compiler (jit) 에는 C1, C2 두개의 컴파일러가 있다.

C1 을 Client, C2 를 Server 라고 한다.

 

Java7 의 새 기능으로 tiered compilation 이 추가되었는데, non-jit (interpreter), C1, C2 를 교차 컴파일하는 기능이다.

 

이 기능이 뭔지 예전에 한참 찾아 헤맸는데 최근에 Baeldung 에 정리가 되어있어 기록으로 남긴다.

https://www.baeldung.com/jvm-tiered-compilation

참고로 Hotspot 계열 한정이다.

 

저걸 보고나서 오라클 문서를 보면 의문이 든다.

Java8 의 GC 튜닝 문서인데.. Windows i586 계열에선 Server-class 를 선택해도 Client-class 로 동작한다고 되어있다.

(Client VM 이 상호 동작하는 어플리케이션 환경에서 더 나은 성능을 보여준다고 한다. 예를 들어, GUI)

이 경우에는 C2 컴파일러가 없다는 뜻인가? 그렇다면 완전한 교차 컴파일이 불가능한게 아닌가? (amd64 는 상관없다)

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html

 

이걸 보면 의문이 또 든다.

Java8 의 Server-class 탐색 페이지를 보면 amd64 계열은 애시당초 Client VM을 제공하지 않는다.

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

C1 이 없으면 교차 컴파일이 가능한가? non-jit 와 C2 만으로 동작하는 건가?

혹시 C1 과 Client VM 은 다른 건가?

 

이 링크의 답변을 보면 Server / Client 구분은 이미 사라진지 오래이다.

https://stackoverflow.com/questions/198577/real-differences-between-java-server-and-java-client

(이게 머야...)

 

그리고 J9 문서를 보면 새롭다.

https://www.ibm.com/docs/en/sdk-java-technology/8?topic=reference-jit-compiler 

완전 새롭다. jit 레벨을 제공한다. Hotspot 의 jit 레벨은 감춰져 있는데 비해, J9 에서는 설정이 가능하다.

그리고 Server / Client 옵션을 취급하지 않는다. 여기에서도 교차 컴파일 기능을 제공하는지 모르겠다.

 

여기까지

언젠가 다시 살펴보게 된다면 정리를 하고 아니면 말고..

 

혹시 몰라

오라클 백서 링크도 남긴다.

https://www.oracle.com/java/technologies/whitepaper.html

 

'java' 카테고리의 다른 글

jenv 설치  (0) 2024.05.10
intellij 처음 설정  (0) 2022.11.14
spring profile or maven profile  (0) 2021.11.28
stream (1)  (0) 2021.05.25
lambda (2) - method references  (0) 2021.05.24
Comments