본문 바로가기
JAVA & JVM

Class Loader

by 샤워하다돌면워싱턴 2022. 8. 30.
반응형
Class Loader
클래스 로더는 상위로 부터 순서대로 부트스트랩(Bootstrap), 확장(Extensions), 시스템(System) 클래스로더가 순서대로 올라간다. 즉, 동일한 클래스가 여러 곳에 존재할 때 로딩되는 우선순위는 Bootstrap>Extensions>System Class Loader가 된다. 부트스트랩 클래스 로더까지 확인해도 없으면 요청받은 클래스 로더가 파일 시스템(CLASSPATH 등 기준)에서 해당 클래스를 찾는다.
 
- 부트스트랩(Bootstrap) Class Loader
 : 자바 가상 머신이 실행될때 가장 먼저 실행되는 클래스 로더로, JAVA 실행에 필요한 기본적인 클래스들($JAVA_HOME/jre/lib/rt.jar)을 로딩한다. 
다른 클래스 로더와 달리 자바가 아니라 네이티브 코드로 구현됨
- 확장(Extensions) Class Loader
 : 추가로 로딩되는 클래스들로 $JAVA_HOME/lib/ext/*.jar에 있는 JAVA 확장 클래스들이 로딩된다. 
이 클래스들은 별도로 클래스패스(Classpath)에 설정되어 있지 않아도 로딩된다.
- 시스템(System) Class Loader
  : 사용자가 지정한 $CLASSPATH 내의 클래스들을 로드한다. 
- 사용자 정의(User-Defined) Class Loader
  : 애플리케이션 사용자가 직접 코드 상에서 생성해서 사용한 클래스를 로드한다.
 

*Class를 탐색하는 방법

Class Loader가 로드 요청을 받으면 내부적으로 loadClass()라는 메소드가 수행된다. 
loadClass()메소드는 Class가 이미 로드 되어 있으면 이를 반환하고 그렇지 않으면 부모 Class Loader에게 위임한다.
부모 Class Loader도 이 Class를 로드하지 않았다면 findClass() 메소드를 호출한다.
findClass()메소드는  요청 받은 Class Loader가 직접 파일 시스템을 탐색하여 Class를 Load한다.
 
ex) System Class Loader에게 특정 Class를 Load 하도록 하는 작업을 요청했다고 가정하자.
이 Class는 파일시스템 어딘가에 존재할 것이고 그 디렉토리는 $CLASSPATH로 지정하였다.
System Class Loader는 자신의 Namespace를 찾아보고 Load 한 적이 없으면 자신이 Load를 시도하는 것이 아니라
Extension Class Loader에게 요청을 위임한다. Extension Class Loader도 자신의 Namespace를 검색하여 Class를 찾지 못할 경우 다시 Load작업은 Bootstrap Class Loader로 넘어가서 같은 작업을 반복한다.
Boot도 실패하게 되면 Class 로드를 요청받은 System 클래스 로더가 Load를 시도하여 $CLASSPATH를 직접 찾아보고 해당 Class를 Load하게 된다.
 
※ JVM에서 Default로 사용하는 Class Loader는 System Class Loader이다.
User Defined Class Loader를 생성할 때 별도의 부모를 지정하지 않게 되면 System Class Loader가 부모가 된다.
 
 
JAR : Java Archive의 약자 일반적으로는 Java Application을 의미하나 J2EE에서는 보통 EJB모듈을 묶어놓은 것을 의미한다.
EJB 모듈 : EJB 콤포넌트 및 Bean 들 그리고 Deployment Descriptor를 포함
WAR : Web Archive의 약자 J2EE에서 Web Application를 JAR 형태로 묶은 것을 의미한다. WebRoot 하위의 jsp 파일 또는 Servlet 그리고 /WEB-INF/classes/* 등의 파일과 Web Application의 Deployment Descriptor인 /WEB-INF/web.xml을 묶은 것

 

반응형

'JAVA & JVM' 카테고리의 다른 글

Java Thread  (0) 2022.08.30
JAVA Memory Option  (0) 2022.08.30
ParallelGCThreads, ParallelCMSThreads 계산법  (0) 2022.08.30
Garbage Collection Algorithm(가비지 컬렉션 알고리즘)  (0) 2022.08.30
JAVA란?  (0) 2022.08.30

댓글