자바 코드를 작성한 후에 컴파일을 하면 해당 코드는 JVM 위에서 실행 가능한 상태가 된다. 이때 JVM이 클래스를 실행하기 위해서는 클래스를 로딩해와야하는데,
그 역할을 해주는 친구가 클래스 로더다.
클래스 로더의 특징
- 계층적
- 클래스 로딩 위임 가능
- 가시적 규약 = 클래스를 로딩할 때 가능한 범위 존재
자식 클래스 로더는 로딩 위임을 통해서 부모 클래스 로더가 로딩한 클래스를 찾을 수 있지만, 부모 클래스 로더는 자식 클래스 로더가 뭘 로딩했는지 모른다.
- 클래스 언로딩 불가능
클래스 로더로 로딩한 클래스를 언로딩할 수 없다. 가비지 컬렉터가 동작하거나 WAS 재시작으로 언로딩할 수 있다.
클래스 로더의 계층
- 부트스트랩 로더
JVM 런타임 실행을 위해 기반이 되는 파일 로드
rt.jar 파일과 연관이 있다.
- 확장 클래스 로더
환경 변수로 지정된 폴더에 있는 클래스 파일을 로딩한다. Object를 포함한 Java API 등을 여기서 로드한다.
- 시스템 클래스 로더
클래스패스에 포함된 클래스들을 로드한다. 사용자는 시스템 클래스 로더가 로드하는 클래스 패스 영역에만 접근할 수 있다.
- 사용자 정의 클래스 로더
웹 어플리케이션 클래스 로더는 사용자 정의 클래스 로더에 해당한다.