JDK, JVM 또는 둘 다에서 Java 6의 성능이 향상되었습니까?
-
01-07-2019 - |
문제
Java SE 6에서 언급된 성능 향상이 컴파일러에 있는지, 아니면 런타임에 있는지 궁금합니다.달리 말하면, JDK 6으로 컴파일된 Java 5 애플리케이션이 JSE 5에서 실행되는 개선 사항(향상된 컴파일러 최적화를 나타냄)을 볼 수 있습니까?JDK 5로 컴파일된 Java 5 애플리케이션이 JSE 6에서 실행되는 개선 사항을 볼 수 있습니까(향상된 런타임 최적화를 나타냄)?
JDK 6에서 컴파일하는 데는 정확히 동일한 코드베이스에 대해 JDK 5에서보다 거의 두 배의 시간이 걸리는 것으로 나타났습니다.나는 그 여분의 시간 중 적어도 일부가 컴파일러 최적화에 소비되어 더 나은 성능의 JAR 및 WAR이 만들어지기를 바라고 있습니다.Sun의 JDK 정보는 그들이 수행한 성능 향상에 대해 실제로 자세히 설명하지 않습니다. A열에서 약간, B열에서 약간이라고 가정하지만 어느 것이 더 큰 영향을 미치는지 궁금합니다.JDK 6과 JDK 6에서 수행된 벤치마크를 아는 사람이 있습니까?JDK 5?
해결책
컴파일러의 개선 사항에 대해서는 들어본 적이 없지만 런타임 성능 개선 사항에 대한 광범위한 정보가 게시되었습니다.
마이그레이션 가이드:
[http://java.sun.com/javase/6/webnotes/adoption/adoptionguide.html]
성능 백서:
[http://java.sun.com/performance/reference/whitepapers/6_performance.html]
다른 팁
Java 소스에서 바이트코드로 컴파일하는 javac는 최적화를 거의 수행하지 않습니다.실제로 최적화를 사용하면 나중에 최적화하기 위해 분석하기가 더 어려워지기 때문에 실제로 코드 실행 속도가 느려지는 경우가 많습니다.
1.5와 1.6용으로 생성된 코드 사이의 유일한 중요한 차이점은 -target 1.6을 사용하면 스택 상태에 대한 추가 정보가 추가되어 더 쉽고 빠르게 검증할 수 있다는 것입니다(Java ME도 이 작업을 수행함).이는 클래스 로딩 속도에만 영향을 미칩니다.
실제 최적화 부분은 바이트코드를 네이티브 코드로 컴파일하는 핫스팟 컴파일러입니다.이는 일부 업데이트 릴리스에서도 업데이트됩니다.Windows에서는 기본적으로 느린 클라이언트 C1 버전의 핫스팟만 JRE에 배포됩니다.서버 C2 핫스팟은 더 빠르게 실행되지만(java 명령줄에서 -server 사용) 시작 속도가 느리고 더 많은 메모리를 사용합니다.
또한 라이브러리와 도구(javac 포함)는 때때로 최적화 작업을 수행합니다.
JDK 6이 JDK 5보다 코드 컴파일 속도가 느린 이유를 모르겠습니다.설정에 미묘한 차이가 있나요?
거의 100% 런타임입니다.몇 가지 기본 컴파일 트릭을 Java 컴파일러 자체에 적용하는 것이 가능하지만 Java 1.5와 1.6 사이에 상당한 개선이 있다고는 생각하지 않습니다.
새로운 Java 가상 머신에는 많은 새로운 개선 사항과 최적화가 이루어졌습니다.따라서 향상된 성능을 볼 수 있는 주요 부분은 버전 6 jvm으로 Java를 실행하는 동안입니다.
Java 6 JDK를 사용하여 이전 Java 코드를 컴파일하면 아마도 더 효율적인 코드가 생성될 것입니다. 그러나 주요 개선 사항은 가상 머신에 있습니다. 적어도 제가 본 바로는 그렇습니다.