2011-03-17 3 views
3
나는 이러한 내용을 참조 자바 docs에서

:시스템 클래스 로더의 리소스 검색 알고리즘

시스템 클래스 로더의 자원 검색 알고리즘은 자원을 찾는 데 사용됩니다.

하지만이 "검색 알고리즘"이 실제로 작동하는 방식, 특히 Android의 컨텍스트에서 어디에서 배울 수 있습니까?

답변

2

Android (Dalvik) 시스템 클래스 로더는 PathClassLoader입니다.

알 고를 알아 내려면 소스 코드를 살펴 봐야합니다. 사용 가능한 Jar 파일과 디렉토리를 가로 지르는 어떤 형태의 트리 트래버스가 될 것입니다.

6

당신은 자바 클래스 로더의 계층 구조, 예컨대 :

Bootstrap CL 
     | 
     | 
    Extension CL 
     | 
     | 
SystemClassLoader CL 
     | 
     |  
Application Specific CL 

는 CL의 (때문에) findClass() 메소드에게 먼저 클래스의로드를 시도하는 부모의 통상 대표하는 클래스 로더를 호출합니다.

예. 당신이 당신의 JVM의내선 폴더에있는 클래스를로드하려는 경우 당신이 부모의에 처음으로 위임합니다

Class clazz=ClassLoader.getSystemClassLoader().findClass("org.pack.ExtClass"); 

이를 사용할 수 있습니다, 그것은 부모의에 위임 할 확장 클래스 로더, 부트 스트랩 CL. 부트 스트랩 CL은 클래스를 찾을 수 없으므로 Extension ClassLoader에 null을 반환하고 확장 CL은 클래스를 찾습니다. 클래스 경로에서 클래스 "org.pack.ExtClass"를 찾을 것이므로 클래스를로드하고 준비하고 SystemClassLoader에 반환하면 clazz 참조가 반환 된 클래스 객체로 설정됩니다.

일반적으로 ClassLoader는 항상 부모에게 우선 위임하고 클래스를 찾으려고 시도합니다.

그러나이 규칙에는 예외가 있으며, 가장 눈에 띄는 것은 Tomcat 외의 WebApp Classloader입니다. 여기서 WebAppClassLoader는 조금 다르게 작동합니다. Tomcat 디렉토리에 bootstrap.jar이 있고 클래스를 먼저로드하고 요청 된 클래스를 찾을 수없는 경우 부모에게 위임하기 만하는 CL이 있다고 생각합니다.

일부 링크 :

http://www.developer.com/java/other/article.php/2248831/Java-Class-Loading-The-Basics.htm

도움 http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html

http://www.ibm.com/developerworks/java/library/j-dyn0429/

희망 ..