Java의 기본적인 ClassLoader 구조는 다음과 같습니다.
Bootstrap classLoader는 모든 ClassLoader의 부모 ClassLoader이며, 이 ClassLoader를 사용해서 standard JDK classes를 로드하게 됩니다.
Extensions ClassLoader는 Bootstrap ClassLoader를 상속하며, lib/ext 디렉토리에 있는 클래스를 로드하게 됩니다.
마지막으로 System-Classpath ClassLoader는 Extensions ClassLoader를 상속하며, CLASSPATH에 잡혀 있는 모든 클래스, java.class.path 시스템 프라퍼티, -cp 혹은 -classpath에 잡혀 있는 모든 클래스를 로드하게 됩니다.
OSGi를 이해하는데 중요한 개념이 ClassLoader이기 때문에 ClassLoader를 조금 살펴봤습니다. 물론 OSGi가 아니더라도 중요한 문제겠죠.
Crosscutter님께서 좋은 정리를 해주셔서 열심히 읽어 봤습니다. 간단히 정리해보면 아래와 같습니다. 자세한 내용은 링크를 직접 읽어보시면 됩니다.
Tomcat 4.x 문서에 Tomcat 내에서 사용하는 ClassLoader 구조가 나와 있어 살펴봤습니다.
Java 내부적으로 돌아가는 근본적인 메카니즘에 대해 지식이 많이 부족합니다. 바탕 없이 높은 건물을 지울수는 없는데 말이죠..^^;
Bootstrap classLoader는 모든 ClassLoader의 부모 ClassLoader이며, 이 ClassLoader를 사용해서 standard JDK classes를 로드하게 됩니다.
Extensions ClassLoader는 Bootstrap ClassLoader를 상속하며, lib/ext 디렉토리에 있는 클래스를 로드하게 됩니다.
마지막으로 System-Classpath ClassLoader는 Extensions ClassLoader를 상속하며, CLASSPATH에 잡혀 있는 모든 클래스, java.class.path 시스템 프라퍼티, -cp 혹은 -classpath에 잡혀 있는 모든 클래스를 로드하게 됩니다.
OSGi를 이해하는데 중요한 개념이 ClassLoader이기 때문에 ClassLoader를 조금 살펴봤습니다. 물론 OSGi가 아니더라도 중요한 문제겠죠.
Crosscutter님께서 좋은 정리를 해주셔서 열심히 읽어 봤습니다. 간단히 정리해보면 아래와 같습니다. 자세한 내용은 링크를 직접 읽어보시면 됩니다.
- 규칙 1. 클래스 로더는 계층 구조를 형성
- 규칙 2. 클래스는 필요 시점에 로딩된다.
- 규칙 3. 클래스 A를 로팅할 때는, 클래스 A를 호출한 클래스 B의 클래스 로더가 인스턴스 로딩을 담당한다.
- 규칙 4. 클래스 유일성 식별: 클래스명+패키지명+클래스로더 인스턴스
- 규칙 5. 클래스 로더에는 명시적인 Unload가 없다. 대신 GC될 때 Unload 된다.
- 규칙 2. 클래스는 필요 시점에 로딩된다.
- 규칙 3. 클래스 A를 로팅할 때는, 클래스 A를 호출한 클래스 B의 클래스 로더가 인스턴스 로딩을 담당한다.
- 규칙 4. 클래스 유일성 식별: 클래스명+패키지명+클래스로더 인스턴스
- 규칙 5. 클래스 로더에는 명시적인 Unload가 없다. 대신 GC될 때 Unload 된다.
Tomcat 4.x 문서에 Tomcat 내에서 사용하는 ClassLoader 구조가 나와 있어 살펴봤습니다.
- Bootstrap ClassLoader
- System ClassLoader
- Common ClassLoader
- Catalina ClassLoader: Tomcat 4 자체를 구동하는데 사용하는 클래스 로드
- Shared ClassLoader: 모든 웹 애플리케이션에서 공유하는 클래스 로드
- WebappX ClassLoader: 배포된 각 웹 애플리케이션 별로 클래스 로드 생성
- JasperX ClassLoader: JSP 페이지를 사용하게 되는 경우, JSP 페이지에 대한 별도의 클래스로더 생성
- System ClassLoader
- Common ClassLoader
- Catalina ClassLoader: Tomcat 4 자체를 구동하는데 사용하는 클래스 로드
- Shared ClassLoader: 모든 웹 애플리케이션에서 공유하는 클래스 로드
- WebappX ClassLoader: 배포된 각 웹 애플리케이션 별로 클래스 로드 생성
- JasperX ClassLoader: JSP 페이지를 사용하게 되는 경우, JSP 페이지에 대한 별도의 클래스로더 생성
Java 내부적으로 돌아가는 근본적인 메카니즘에 대해 지식이 많이 부족합니다. 바탕 없이 높은 건물을 지울수는 없는데 말이죠..^^;

Prev
Rss Feed


