Skip to content

Latest commit

 

History

History
23 lines (16 loc) · 2.73 KB

class-loader.md

File metadata and controls

23 lines (16 loc) · 2.73 KB

자바 개발을 위해 꼭 필요한 클래스 로더

한번 작성하면 플랫폼에 상관없이 쓸 수 있다.

이 틱징을 실행할 수 있게 한 기술이 바로 클래스 로더이다. 자바 코드를 작성한 후 컴파일 하면 해당 코드는 JVM에 실행 가능한 상태가된다. 이때 JVM이 클래스를 실행하기 위해서 클래스를로딩하는 과정이 필요하다. 그 과정을 수행해 주는 역할이 하는 것이 바로 클래스 로더다.

클래스 로더 특징

...

  • 구조가 계층적이다. 상위 클래스 로더에서 하위 클래스 로더를 갖는 방식이며, 최상위 클래스 로더는 부트스트랩 클래스 로더이다.
  • 클래스 로딩을 위임할 수 있다.
  • 클래스 로더는 가시적인규약이 있다. 클래스를 로딩할 때 가능한 범위를 말한다. 자식 클래스는 로더는 클래스 로딩 요청 위임을 통해 부모 클래스 로더가 로딩한 클래스를 찾을 수 있지만 , 부모 클래스가 로더는 자식 클래스 러더가 로딩한 클래스를 알 수 없다.
  • 클래스 언로딩 불가능이다. 즉 클레스 로더로 로딩한 클래스들을 언로딩할 수 없다. 클래스 로더가 로딩한 클래스를 언로딩할 수 없음므로 가비지 컬랙터가 동작하거나 WAS가 재시작할때 초기화 된다.

클래스 로더 유형

클래스 로더에는 네가지 유형이 있다. 부트스크랩 클래스 로더, 확장 클래스 로더, 시스템 클래스 로더, 그리고 개발자가 만든 사용자 정의 클래스 로더가 있다.

  1. 부트스트랩 클래스 로더는 JVM 런타임 실행을 위해 기반이 되는 파일을 로드한다. 부트스크랩 로더는 rt.jar 파일과 연관이있다. 부트스트랩 로더가 로딩이 끝나면 확장 클래스 로더가 자바의 초상위 클래스 Object를 포함한 자바 API를 로드한다.
  2. 부트스트랩 클래스 로더가 로딩이 끝나면 확장 클래스 로더가 자바의 최상위 객체인 Object객체를 포함한 자바 API를 로드한다(자바 홈 폴더 하위 ext 폴더 하위에 있는 JAR 파일들과 연관있다)
  3. 확장 로더 클래스 로드가 끝나면 시스템 클래스 로더가 클래스패스에 포함된 클래스들을 로드한다.

클래스 로더는 이와 같은 계층 관계를 가지고 있다. 사용자는 시스템 클래스 로더가 로드하는 클래스 패스 영역에서만 접근할 수 있다. 그래서 로컬에서 외부 라이버러를 실행할 때 클래스 패스를 지정해서 실행하기도한다. 보통 독립적인 영역이 필요한 WAS의 경우에는 시스템 클래스 로더 하위에 사용자 정의 로더를 만들어 사용한다.