java - 所有类都是由Object类的记载器加载的吗?
大家讲道理
大家讲道理 2017-04-18 10:48:25
0
3
605

看到网上这么说:

双亲委派机制描述
某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

首先将加载任务委托给父类加载器,依次递归 这句话的意思是所有类都是由Object类的记载器加载的吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(3)
大家讲道理

자바 가상 머신의 첫 번째 클래스 로더는 부트스트랩입니다. 이 로더는 자바 가상 머신 커널에 중첩되어 있으며 C++로 작성된 바이너리 코드입니다.

위임 메커니즘을 사용하면 상위 클래스가 재귀적으로 검색됩니다. 즉, 부트스트랩을 사용하여 로드를 시도하고, 찾지 못하면 내려가는 것이 좋습니다. 두 개의 바이트코드 복사본이 메모리에 나타나는 것을 방지합니다.

ClassClassLoader를 오해하셨네요.

클래스가 기록되면 먼저 현재 스레드의 클래스 로더를 사용하여 스레드의 첫 번째 클래스를 로드합니다. 예를 들어 이 클래스는 ClassA이고 클래스 로더는 ClassLoaderA입니다.

ClassA가 ClassB를 참조하는 경우 시스템은 ClassLoaderA를 사용하여 ClassB를 로드합니다.

현재 2개의 클래스가 있습니다(간소화 버전, 실제로는 2개 이상의 클래스).

ClassX와 ClassY가 메모리에 로드되고 둘 다 ClassZ를 참조하는 상황을 가정해 보겠습니다. 그러면 누가 ClassZ를 로드합니까?

분명히 위에서 설명한 로딩 단계에 따르면 ClassZ의 사본 2개가 나타납니다. ClassX는 한 번 로드되고 ClassY는 다시 로드됩니다. ClassY는 ClassX가 로드되었음을 모르기 때문입니다.

이 문제를 해결하는 방법은 상위 클래스를 재귀적으로 검색하는 것입니다.

구체적인 단계는 먼저 BootstrapClassLoader에서 검색하는 것입니다. BootstrapClassLoader가 이 클래스를 로드한 경우 이를 반환합니다. BootstrapClassLoader가 이 클래스를 로드하지 않은 경우 이 클래스를 찾을 때까지 계속 검색합니다. 이 스레드의 클래스 로더를 찾을 수 없으면 클래스가 로드되지 않았음을 의미하며 현재 스레드의 로더를 사용하여 이를 로드합니다. getContextClassLoader()을 사용하여 현재 스레드의 클래스 로더를 가져올 수 있습니다.

小葫芦

Java에는 시스템 클래스 로더와 사용자 정의 클래스 로더라는 두 가지 유형의 클래스 로더가 있습니다.

시스템 클래스 로더에는 로딩 경로 제한이 있습니다. 예를 들어 JDK1.6에서는 Bootstrap Class Loader,
System.getProperty("sun.boot.class.path")을 통해 클래스 로딩 경로

를 얻을 수 있습니다. 으아아아

이 경로의 클래스는 Bootstrap에 의해 처리됩니다. 다른 경로의 클래스가 Bootstrap으로 재귀되어 클래스 파일을 찾을 수 없으면 다음 레벨 클래스 로더가 해당 경로에 로드합니다.

迷茫

위의 말씀이 맞습니다. jvm에 대한 자세한 내용은 관련 서적을 읽어보시길 권합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!