1. ClassLoader의 기술적 특징
Class Loader란 자바의 장점중 하나로, Runtime시 동적으로 Class를 로딩할 수 있게 해주는 기술이다. 이는 모든 Class는 참조 되는 순간 동적으로 Load 및 Link가 이루어진다는 의미이다. 그래서 Bytecode를 Filesystem, Jar Archieve 또는, network socket(Applet)를 동적으로 로딩 할 수 있도록 지원한다. 이러한 모든 Performance는 Dynamic Linking이라고 한다.
1.1. Hierarchical
"계층적 구조(위계 구조 or 위임 구조)"라는 의미이다.
Class loader는 계층적 구조를 가지도록 생성이 가능하다. 이는 상위(부모, Parent) 클래스로더에서 자식 클래스로더를 가지는 것과 같은 형태를 이야기 한다. 그래서 클래스로더는 Bootstrap-Extensions-Applications의 구조를 가지게 된다.
1.2. Delegate load request
"위임 할 로드를 요청"이라는 의미이다.
계층적 구조를 가지기 때문에 ClassLoader에 규칙이 필요로 하다. 우선순위는 상위(부모, Parent) 클래스로더가 가지고, 요청받은 Class가 없는 경우 하위(자식, Child) 레벨의 ClassLoader가 우선순위를 가지게 된다.
1.3. Have visibility constraint
Have (High, Low) visibility constraint로 해석하여 "고(저) 접근 시도의 제약을 가진다."로 해석했다.(개인적인 생각이다.) Delegate load request를 이용하여 자식 클래스로더는 상위(부모, Parent) 클래스로더를 찾고 사용 할 수는 있지만, 상위(부모, Parent) 클래스로더는 하위(자식, Child) 클래스로더를 찾거나 사용하지 못한다는 특징이다.
1.4. Cannot unload classes
Class Loader에는 Class Unload기능이 없다.
그림1. ClassLoader Delegation Model
클래스로더가 클래스를 로딩하게 되면 하나의 Delegation Parent와 함께 생성되고 Cach-Parent-Self의 순서로 해당 클래스를 확인하게 된다.
클래스로더가 로딩을 하게 될 때 가장 먼저 하게 되는 일은 해당 클래스가 이미 로딩되어 있는지 확인하는 것이다. 만약 로딩되어 있다면 메모리에 Cache되어 있을 것이고, 이 경우 해당 클래스를 반환하게 된다. 그래도 로딩되어 있지 않다면 상위(부모, Parent) 클래스로더에게 클래스를 로딩하게 위임을 하게 되고 상위(부모, Parent)가 클래스를 로딩할 수 없다면 자신(Self)이 클래스를 탐색하게 된다.
이러한 방식에 의해 클래스가 로딩될 확률은 Delegation Model에서 상위로 갈 수록 높아진다. 가장 상위에 있는 Bootstrap ClassLoader는 JVM에서 가장 핵심적인 클래스만을 로딩하게 되고 가장 기본적인 클래스들의 버전이 정확하게 일치하는지를 확인한다.
또한 각 클래스가 누구에 의해 로딩 되었는지에 대한 정보도 제공한다. 이 정보는 자신을 포함한 상위의 클래스로더가 로딩한 것만 확인이 가능하고 자신의 하위 클래스로더가 로딩한 것에 대한 정보는 알 수 없다.
2. Reference
3. Check
'Information Technology > Programming' 카테고리의 다른 글
The Java Language and JVM (0) | 2013.04.14 |
---|---|
Java Basic Architecture (0) | 2013.04.11 |
Regular Expressions Debugger (0) | 2013.03.04 |
ClassLoader 3 : Classloader & JAVA Packages (0) | 2012.11.28 |
ClassLoader 2 : Java Application Server ClassLoader (0) | 2012.11.22 |