우리는 Java 6에서 클래스를 컴파일 할 때 일관되게 Java 5보다 크다는 것을 알았습니다.Java 6이 Java 5보다 큰 클래스 크기로 컴파일되는 이유는 무엇입니까?
현재까지 바이트 코드가 변경되지 않았기 때문에 Java 6 컴파일러를 사용합니다. 더 많은 것을 던지고있다. 필요한 모든 것입니까, 아니면 Java 6 소스 코드를 컴파일하는 방법이 있습니까?
우리는 Java 6에서 클래스를 컴파일 할 때 일관되게 Java 5보다 크다는 것을 알았습니다.Java 6이 Java 5보다 큰 클래스 크기로 컴파일되는 이유는 무엇입니까?
현재까지 바이트 코드가 변경되지 않았기 때문에 Java 6 컴파일러를 사용합니다. 더 많은 것을 던지고있다. 필요한 모든 것입니까, 아니면 Java 6 소스 코드를 컴파일하는 방법이 있습니까?
버전 6 javac는 클래스 파일에 추가 "스택 맵"속성을 생성하여 jvm으로 쉽고 빠르게 확인합니다. 이 정도의 크기 차이는 의심 스럽지만 대체로 -target 1.5
옵션을 사용하여 이전 버전과 동일한 바이트 코드를 생성 할 수있었습니다.
편집 :이 새로운 속성에 상세 jsr 202
4.8.4 StackMapTable 특성
스택지도 속성의 섹션 4.8.4에서 발견 될 수있는 가변 길이 속성입니다 코드 의 속성 테이블 속성의 이름은 StackMapTable입니다. 이 속성은 형식 검사 (§4.11.1)에 의한 확인 프로세스 인 동안 사용됩니다.
스택 맵 속성은 0 개 이상의 스택 맵 프레임으로 구성됩니다. 각 스택 맵 프레임은 바이트 코드 오프셋을 명시 적으로 또는 암시 적으로 지정하고 로컬 변수에 대해서는 유형 (§4.11.1), 스택에는 피연산자에 대한 확인 유형을 지정합니다.
파일의 내용을 javap
명령으로 덤프하여 명백한 것이 있는지 알아보십시오. Java 6 클래스 파일에는 몇 가지 추가 속성이있을 수 있습니다.
이것은 v6 javac에 유일하게 추가 된 부분입니까? –
JDK 1.5가 새로운 클래스와 새로운 기능을 제외한 버전 1.6의 코드를 실행할 수없는 주된 이유 일 것 같습니다. –