자바 클래스 로 더-bootstrap,ExtClassLoader,AppClassLoader 의 관계
3176 단어 jvm
1.간단 한 소개
부 트 스 트랩 은 할아버지,엑스 트 클래스 로 더 는 아빠,앱 클래스 로 더 는 아이(손자)다.그러나 아빠 ExtClassLoader 가 너무 바 빠 서 아 이 를 돌 보 는 AppClassLoader 의 책임 은 할아버지 Bootstrap 에 의 해 처리 된다(즉,ExtClassLoader 는 AppClassLoader 아빠 이지 만 할아버지 Bootstrap 에 의 해 로드 된 AppClassLoader 이다.이 상황 은 중국의 국정 과 완전히 같다
2.코드 실험
public class LoaderTest {
/**
* @param args
*/
public static void main(String[] args) {
new LoaderTest().test();
}
/**
* @param args
*/
public void test() {
ClassLoader fatherLoader = this.getClass().getClassLoader();
System.out.println(" :" + fatherLoader.getClass().getName());
// AppClassLoader ExtClassLoader, Bootstrap
// ( .getClassLoader() null)
// Bootstrap、 ExtClassLoader、 AppClassLoader , :ExtClassLoader AppClassLoader , AppClassLoader Bootstrap 。
System.out.println("AppClassLoader null :"
+ (fatherLoader.getClass().getClassLoader() == null));
ClassLoader grandfatherLoader = fatherLoader.getParent();
System.out.println(" :" + grandfatherLoader.getClass().getName());
}
}
코드 실행 결과:
현재 클래스 의 부모 로 더 이름:sun.misc.Launcher$AppClassLoader
AppClassLoader 의 로 더 는 null 입 니까?true
할아버지 캐리어 이름:sun.misc.Launcher$ExtClassLoader
3.클래스 로 더 가 각각 검색 한 디 렉 터 리
1.Bootstrap Loader(시작 클래스 로 더):System.getProperty("sun.boot.class.path")가 지정 한 경로 나 jar 를 불 러 옵 니 다.System.out.println(System.getProperty("sun.boot.class.path")을 통 해인쇄,발견 은 주로"D:\Program Files\\Java\\jdk 1.6.0"10\jre\lib"의 jar 패키지 입 니 다.
2.Extended Loader(표준 확장 클래스 로 더 ExtClassLoader):System.getProperty("java.ext.dirs")가 지정 한 경로 나 jar 를 불 러 옵 니 다.자바 실행 프로그램 을 사용 할 때 검색 경 로 를 지정 할 수 있 습 니 다.예 를 들 어 자바-Djava.ext.dirs=d:\procjects\testproj\classes HelloWorld.
System.out.println(System.getProperty("java.ext.dirs")인쇄 를 통 해,주요 로 딩 디 렉 터 리 는 다음 과 같 습 니 다:
“D:\Program Files\Java\jdk1.6.0_10\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext”
3.AppClass Loader(시스템 클래스 로 더 AppClassLoader):System.getProperty("java.class.path")가 지정 한 경로 나 jar 를 불 러 옵 니 다.자바 실행 프로그램 을 사용 할 때 도-cp 를 추가 하여 기 존의 Classpath 설정 을 덮어 쓸 수 있 습 니 다.예 를 들 어 자바-cp./lavasoft/classes HelloWorld
eclipse 에 대해 서 는'classpath'의 jar 가방 입 니 다.
ExtClassLoader 와 AppClassLoader 는 JVM 이 시 작 된 후 JVM 에 한 부 를 저장 하고 프로그램 실행 중 검색 경 로 를 변경 할 수 없습니다.실행 할 때 다른 검색 경로 에서 클래스 를 불 러 오 려 면 새로운 클래스 로 더 를 만들어 야 합 니 다.
PS:이 단락 은 lavasoft 에서 따 왔 습 니 다.주 소 는 다음 과 같 습 니 다.
참고:
http://hi.baidu.com/haifengjava/blog/item/498fd8365ef5c8390a55a9db.html
http://lavasoft.blog.51cto.com/62575/184547
…………
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 문자열 풀우리는 Java에서 문자열이 힙 메모리 영역에 저장된다는 것을 알고 있습니다. 이 힙 메모리 내부에는 String Pool이라는 특정 메모리 영역이 있습니다. 문자열 프리미티브를 생성하면 자바 문자열의 불변성 덕분에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.