jgwk
tiered compilation 본문
용어가 뒤죽박죽이다.
용어는 사용하는 문맥에 따라 조금씩 다른가보다. 이걸 정리를 해서 적고 싶은데 잘 모르겠다.
본대로 적고 남기니 언젠가는 정리를 할지도...
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 |