2008-09-18 9 views
3

저는 Java SE 6에서 성능 향상에 대해 궁금해했습니다. 컴파일러 또는 런타임에 있습니까? 다른 말로하면, JDK 6에 의해 컴파일 된 Java 5 애플리케이션은 JSE 5 (개선 된 컴파일러 최적화를 나타냄)에서 개선 된 실행을 볼 수 있습니까? JDK 5로 컴파일 된 Java 5 애플리케이션이 JSE 6에서 개선 된 실행을 보았습니까 (런타임 최적화가 개선되었음을 나타냄)?JDK, JVM 또는 둘 다에서 Java 6의 성능이 향상 되었습니까?

나는 동일한 코드베이스를위한 JDK 5에서처럼 JDK 6에서 컴파일하는 것은 거의 두 배나 오래 걸리는 것으로 나타났습니다; 그 여분의 시간 중 적어도 일부는 컴파일러 최적화에 사용되어 더 나은 JAR 및 WAR로 이어지기를 바랍니다. Sun의 JDK 정보는 성능 향상에 대해 자세히 설명하지는 않습니다. A 열에서 조금, B 열에서 조금 추측했으나 어느 것이 더 큰 영향을 주는지 궁금합니다. 누구든지 JDK 6 대 JDK 5에서 수행 된 벤치 마크를 알고 있습니까?

답변

1

거의 100 % 런타임입니다. Java 컴파일러 자체로 만들 수있는 기본적인 컴파일 트릭이있을 수도 있지만 Java 1.5와 1.6 사이에 중요한 개선이 있다고 생각하지 않습니다.

1

새로운 Java 가상 머신에 많은 개선과 최적화가있었습니다. 따라서 버전 6의 JVM을 사용하여 Java를 실행하는 동안 향상된 성능을 확인할 수 있습니다. 아마 더 효율적인 코드를 생성 할 자바 6 JDK를 사용하여 기존 자바 코드를 컴파일

하지만 주요 개선 사항은 적어도 그게 내가 눈치 챘을거야, 가상 머신에 거짓말.

7

javac의, 바이트 코드에 자바 소스에서 컴파일 거의 최적화를 수행합니다. 실제로 최적화는 나중에 최적화를 위해 분석하기가 더 어려워 코드를 실제로 느리게 실행하게 만듭니다.

1.5 및 1.6 생성 된 코드의 유일한 큰 차이

은 -target 1.6 추가 정보는 스택의 상태에 대해 추가로 (자바 ME이뿐만 아니라 수행) 확인이 쉽고 빠르게 할 것입니다. 클래스 로딩 속도에만 영향을줍니다.

실제 최적화 부분은 네이티브 코드로 바이트 코드를 컴파일 핫스팟 컴파일러입니다. 이것은 일부 업데이트 릴리스에서도 업데이트됩니다. Windows에서는 느린 클라이언트 C1 버전의 핫스팟 만 기본적으로 JRE에 배포됩니다. 서버 C2 핫스팟은 더 빨리 실행되지만 (Java 명령 행에서 -server 사용), 시작하는 데 더 느려지고 더 많은 메모리를 사용합니다.

또한 라이브러리 및 도구 (javac 포함)에 최적화 작업이 수행되는 경우가 있습니다. 사용자가 설정에서 미묘한 차이가 JDK 5보다 코드를 컴파일 속도가 느린 JDK 6을 찾는 이유

모르겠어요?