-XX:-TieredCompilation은 정확히 무엇을 합니까?
사용 java -XX:+PrintFlagsFinal
하여 TieredCompilation
깃발을 찾았고 온라인에서 이에 대해 조금 읽었습니다.
그러나 로 설정할 때 어떤 일이 발생 하는지 정확히 알지 못합니다 false
.
컴파일 시스템은 기본적으로 인터프리터, C1 및 C2로 분할된 5가지 실행 수준을 지원한다는 것을 알고 있습니다.
- 레벨 0 - 통역사
- 레벨 1 - 전체 최적화가 있는 C1(프로파일링 없음)
- 수준 2 - 호출 및 백에지 카운터가 있는 C1
- 레벨 3 - 전체 프로파일링이 있는 C1(레벨 2 + MDO)
- 레벨 4 - C2
두 가지 질문:
(1) 를 설정 -XX:-TieredCompilation
하면 이 레벨 중 일부가 비활성화됩니까? 그렇다면 어느 것입니까?
(2) C1 또는 C2를 비활성화할지 또는 전혀 컴파일하지 않을지를 결정하는 플래그가 있습니까?
-XX:-TieredCompilation
메서드가 최대 최적화 수준(C2)에서 해석되거나 컴파일되도록 중간 컴파일 계층(1, 2, 3)을 비활성화합니다.
부작용 TieredCompilation
플래그는 컴파일러 스레드 수, 컴파일 정책 및 기본 코드 캐시 크기도 변경합니다. 와 그 주 TieredCompilation
장애인
- 더 적은 컴파일러 스레드가 있을 것입니다.
- 고급 컴파일 정책 대신 간단한 컴파일 정책(메소드 호출 및 백에지 카운터 기반)이 선택됩니다 .
- 기본 예약 코드 캐시 크기는 5배 더 작습니다 .
C2 컴파일러를 비활성화하고 추가 오버헤드 없이 C1만 남기려면 를 설정하십시오 -XX:TieredStopAtLevel=1
.
모든 JIT 컴파일러를 비활성화하고 인터프리터에서 모든 것을 실행하려면 -Xint
.
JIT에는 여러 수준이 있습니다(JIT를 전혀 실행하지 않는 경우 포함).
이전 버전의 Java에서는 인터프리터만 사용하거나 클라이언트(C1) 컴파일러만 사용하거나 서버(C2) 컴파일러만 사용하여 실행하려면 처음에 선택해야 했습니다(예: -Xint
, -client
, -server
).
Java 7과 함께 제공되는 계층형 컴파일은 핫스팟 컴파일러가 이러한 단계 사이를 원활하게 이동할 수 있음을 의미했습니다. 따라서 어떤 일이 발생하면 특정 양의 실행 후에 코드가 C1으로 컴파일되고 더 많은 실행 후에는 C2로 컴파일됩니다. 이것은 메서드별로 실행되므로 앱이 실행될 때 상당한 부분이 인터프리터(콜드 코드용)에서 실행되고 코드가 많이 실행된 후에(핫) 다음으로 컴파일됩니다. 성능이 향상됩니다. 당신은 실행하여 다른 수준을 볼 수 있습니다
$ java -XX:+PrintFlagsFinal -version | grep CompileThreshold
intx Tier2CompileThreshold = 0
intx Tier3CompileThreshold = 2000
intx Tier4CompileThreshold = 15000
openjdk version "1.8.0_92"
OpenJDK Runtime Environment (Zulu 8.15.0.1-macosx) (build 1.8.0_92-b15)
OpenJDK 64-Bit Server VM (Zulu 8.15.0.1-macosx) (build 25.92-b15, mixed mode)
는 -XX:-TieredCompilation
본질적 TieredCompilation=false
수단이 전환을하지 않는, 당신은 클라이언트 또는 서버 컴파일러를 사용할지 여부를 전면를 선택해야합니다. JVM은 CPU에 따라 적용할 모드를 경험적으로 결정합니다. 다중 프로세서 또는 64비트 VM이 있는 경우 서버 VM(C2)을 사용하고 그렇지 않은 경우 클라이언트 VM(C1)을 사용합니다.
그래서 -Xint
(어떤 컴파일러 즉 없음) 단지 인터프리터로 실행되며 만 C1 또는 C2 중 하나를 선택할 수 있습니다 -client
또는 -server
와 함께, 각각-XX:-TieredCompilation
Java 8 사용자 TieredComplilation
는 부동 소수점으로 프로덕션 사용을 위해 비활성화 하는 것이 좋습니다 .
Oracle은 Java8에서 이 문제를 수정하지 않습니다. 모든 핫스팟 JVM 8 w/ G1GC에는 동일한 문제가 있습니다.
ReferenceURL : https://stackoverflow.com/questions/38721235/what-exactly-does-xx-tieredcompilation-do
'IT이야기' 카테고리의 다른 글
Sklearn, gridsearch: 실행 중 진행 상황을 인쇄하는 방법 (0) | 2021.10.15 |
---|---|
갤러리에서 이미지를 가져오는 Android가 회전합니다. (0) | 2021.10.15 |
Swift - 프로토콜 확장 - 속성 기본값 (0) | 2021.10.15 |
ggmap 오류: GeomRasterAnn이 호환되지 않는 버전의 ggproto로 빌드되었습니다. (0) | 2021.10.15 |
보안을 처리하고 사용자가 입력한 URL로 XSS를 방지하는 가장 좋은 방법 (0) | 2021.10.14 |