몇 달 전에 Java 1.5에서 1.6 (J2EE, Tomcat)으로 전체 설정을 마이그레이션 한 후, Maven이 Sun의 javac 매개 변수 "-target 1.5"를 통해 1.5로 타겟팅 된 클래스 파일을 생성하도록 구성되었음을 알았습니다. "-target 1.5"를 "-target 1.6"으로 변경할 때 성능이 향상 될 것으로 기대합니까?"-target 1.5"를 사용하여 생성 된 Java 클래스 파일의 성능 영향은 1.6 VM에서 실행됩니까?
답변
별 차이가 없어야합니다. 1.6 파일은 바이트 코드 검증 속도를 향상시키는 스택 맵/테이블 구조를 가질 수 있습니다 (Apache Harmony는 더 똑똑한 알고리즘을 사용합니다).
당신은 클래스 상수의 초기 로딩이 약간 느린 것 1.4로 이동했다,하지만 관련이없는 클래스합니다 (ldc
바이트 코드의 새로운 형태 Class.forName
대체를로드하는 데 걸리는 시간을 주어,하지만 그 결과를 저장 한 경우 정적 필드에서)
일반적으로 중요하지 않습니다. 런타임 컴파일러는 중요한 비트이며 동일한 기계 코드를 생성 할 수 있습니다. 이전에는 런타임 컴파일러의 코드를 변경하지 않기 위해 최적화를 줄이기 위해 javac이 작성되었지만 -target
플래그와는 독립적입니다.
왜 성능 차이가 나는지 모르겠다. 클래스 형식 1.5와 1.6 사이에는 큰 차이가 없습니다. 다른 것을 변경하지 않으면 대상이 생성 된 클래스의 classversion id를 변경합니다.
Java 1.6은 바이트 코드 확인 프로세스를 단순화하는 different class-file-format을 사용합니다. 따라서 새로운 클래스 파일 형식을 사용하는 경우 시작 시간이 약간 개선되어야합니다.
링크가 더 이상 존재하지 않습니다. –
다음 업데이트를 위해 변경하려고합니다. 다 치지 않아야하며 더 일관성이 있습니다 ... – Kjeld