JVM 구현에 어떤 식 으로든 관여하지 않는 실제 이유를 모르지만 몇 가지 그럴듯한 이유를 생각할 수 있습니다.
- Java의 아이디어는 write-once-run-anywhere 언어이며, 클래스 파일에 미리 컴파일 된 내용을 넣는 것은 일종의 위반입니다 (물론 실제 바이트 코드가 여전히 존재하기 때문에 "종류"만 있음).
- 동일한 코드를 여러 번 사용하기 때문에 클래스 파일 크기가 증가합니다. 특히 여러 다른 JVM에서 동일한 프로그램을 실행하는 경우 (다른 버전을 다른 JVM으로 간주 할 때 실제로 드물지 않습니다. 정말해야합니다)
- 클래스 파일 자체는 쓰기가 불가능할 수 있습니다 (확인하기가 매우 쉽습니다).
- JVM 최적화는 부분적으로 런타임 정보를 기반으로하고 다른 실행에서는 적용 가능하지 않을 수 있습니다 (여전히 약간의 이점을 제공해야 함).
하지만 저는 정말로 추측하고 있습니다. 보시다시피 제 이유 중 어떤 것도 실제 쇼 스토퍼라고 생각하지 않습니다. 나는 Sun이이 지원을 우선 순위로 생각하지 않는다고 생각하며, 습관적으로이 작업을 수행하면 사람들이 Java 클래스 파일이 실제로 각 VM에 대해 별도의 버전이 필요하다고 생각하게 할 수도 있기 때문에 내 첫 번째 이유가 진실에 가깝다고 생각합니다. 크로스 플랫폼.
내가 선호하는 방법은 실제로 이와 같은 작업을 미리 명시 적으로 수행하는 데 사용할 수있는 별도의 바이트 코드-네이티브 변환기를 사용하여 특정 VM에 대해 명시 적으로 빌드 된 클래스 파일을 생성하는 것입니다. 다른 VM에서도 실행할 수 있습니다. 그러나 그것은 아마도 내 경험에서 비롯된 것 같습니다. 저는 대부분 Java ME를 해왔는데, Java 컴파일러가 컴파일에 대해 더 똑똑하지 않다는 점이 정말 아픕니다.