클래스 로더의 종류에 대해 설명해보세요.
상위 계층부터 부트스트랩 클래스 로더, 플랫폼 클래스 로더, 애플리케이션 클래스 로더가 있습니다.
부트스트랩 클래스 로더는 최상위 클래스 로더로 자바 API를 로드하며, 다른 클래스 로더와 달리 네이티브 코드로 구현되어 있습니다. 플랫폼 클래스 로더는 기본 자바 API를 제외한 확장 클래스를 로드합니다. 애플리케이션 클래스 로더는 클래스 패스 지정된 클래스와 라이브러리를 로드합니다.
클래스 로더의 계층 구조에서 어떠한 클래스 로더들이 상위에 위치하고, 하위에 위치하는지 설명해주세요.
최상위에 부트 스트랩 클래스 로더가 위치하고, 플랫폼 클래스 로더, 애플리케이션 클래스 로더가 위치합니다.
클래스로더의 delegation model에 대해 좀 더 상세히 설명해주세요. 클래스로더가 클래스를 로드할 때 어떤 과정을 거치는지 설명해보세요.
Delegation Model은 계층 구조를 통해 클래스 로딩 요청을 상위 클래스 로더로 위임하는 방식을 의미합니다. 하위 클래스인 애플리케이션 클래스 로더는 부모인 플랫폼 클래스 로더에 요청을 전달하고, 다시 최상위 부트스트랩 클래스에게 요청을 전달합니다. 최상위 클래스 로더에서 클래스를 찾으면 클래스가 로드되고, 못 찾으면 하위 클래스로 요청을 다시 전달합니다.
클래스 로더의 부모-자식 관계가 클래스를 로드하는 과정에 어떤 영향을 미치나요?
클래스 로더는 부모 클래스 로더에게 클래스를 먼저 검색하도록 위임하고, 부모 클래스 로더가 클래스를 찾지 못한 경우에 자식 클래스 로더에게 검색을 위임합니다.
클래스 로더의 위임 방식은 어떤 이점을 가지고 있으며, 어떤 순서로 클래스를 검색하는지 설명해주세요.
- 이점
(중복 로딩 방지) 상위 클래스에서 이미 로딩된 클래스가 중복 로딩되는 것을 방지하여 메모리 낭비를 방지할 수 있습니다.
(보안 강화) 상위 클래스 로더는 표준 자바 API, 확장 라이브러리를 로드합니다. 따라서 하위 클래스 로더가 핵심 자바API나 확장 클래스를 임의로 로드, 변경되는 것을 방지하여 시스템 보안과 안정성을 유지할 수 있습니다. - 순서
부트스트랩 클래스 로더를 통해 표준 자바 API 클래스가 로드된 후
확장 클래스 로더에서 확장 클래스가 로드합니다.
이후 애플리케이션 클래스 로더에서 클래스 패스에 있는 클래스를 로드합니다.
GC 발생할 때 어플리케이션이 일시적으로 중단되는 이유는 무엇인가요?
메모리 일관성 유지, 오동작을 방지하기 위함이다.
GC 도중 다른 스레드에 의해 사용되지 않던 객체가 다시 참조하게 되는 경우 오동작을 일으킬 수도 있고, 메모리의 일관성이 깨질 수 있다. 특히 컴팩션 과정에서 객체가 이동하는 동안 해당 객체를 참조한다면 잘못된 위치를 참조할 수도 있다. 따라서 이러한 프로그램의 오동작, 메모리 일관성을 유지하기 위해 애플리케이션은 일시적으로 중단될 수 있다.