2009-07-24 2 views

답변

6

JVM은 호출 될 때 Jar에서 필수 클래스 만로드합니다. 응용 프로그램에 클래스가 필요한 경우 클래스 및 기타 모든 종속 클래스가로드됩니다. 잘 모르겠지만 클래스 로더에서 클래스를 찾고로드하는 것은 클래스 로더의 책임이라고 생각합니다.

0

기본 클래스 로더는 필요할 때 필요한 항목 만로드합니다. CLASSPATH에 10MB JAR이 있고 하나의 .class 파일 만 필요한 경우 JVM은 코드가 처음 액세스 할 때 해당 클래스를로드합니다. .class 바이트 코드는 perm 공간으로 들어갑니다.

자신 만의 클래스 로더를 작성할 수 있다는 의미에서 "제어 가능"하지만 약간의 전문 지식이 필요합니다.

1

전적으로 JVM 및 클래스 로더에 따라 다릅니다. JVM 스펙은 클래스를 지정합니다. 이 처음으로 활성 상태로 사용됩니다. 클래스 로더는 예상보다 빨리 클래스의 일부를로드 할 수 있습니다. 실제로 대부분의 클래스 로더는 가능한 길게 로딩을 지연시킵니다.

2

jar 파일은 zip 파일 형식입니다.

처리 방법은 JRE에 크게 좌우됩니다.

이전 버전의 메모리로 사용 된 Sun JRE는 전체 파일을 매핑합니다. 이렇게하면 논리 메모리가 할당되지만 디스크에서 데이터를로드 할 필요는 없습니다. (32 비트 Windows는 일반적으로 3GB의 연속 메모리를 할당 할 수 없지만 다른 OS에서는 가능합니다).

나는 현재의 행동이 메모리 맵에 Windows의 파일 뒷면에 중앙 디렉토리라고 믿습니다. 다른 OS에서는 읽기만합니다. 이것은 소스에서 #define에 의해 제어됩니다.

JDK7은 다른 작업을 수행 할 가능성이 큽니다.

일반적으로 클래스는 느슨하게로드됩니다. 리소스는 매번 다시 읽습니다. java.util.ResourceBundle 캐시.