JVM 구조에서도 말했듯이 클래스 로더 시스템은 3개로 나누어서 볼 수 있다고 말했다. 거기에 대한 내용을 좀 더 자세하게 정리해보자.
로딩(loading)
클래스 로더가. class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 "메서드" 영역에 저장
이때 메소드 영역에 저장하는 데이터 FQCN, 클래스, 인터페이스, 이늄, 메서드와 변수가 있다
로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 "힙"영역에 저장된다.
링크(Linking)
레퍼런스를 연결하는 과정이다. 링크에서도 3가지로 나눌 수가 있다.
검증 : 바이트코드 검증 기는 생성된 자바 바이트코드가 적절한지 아닌지에 대해서 검증하며 검증이 실패할 경우 검증 오류를 보낸다.
준비 : 모든 정적 변수의 메모리가 할당되며 기본 default 값으로 할당된다.
해석 : 메모리 참조를 메서드 영역에 있는 타입으로 직접 참조한다.
초기화(initlalization)
static 값들 초기화 및 변수에 할당한다.
클래스 로더는 계층 구조로 이뤄져 있으면 기본적으로 세 가지 클래스 로더가 제공된다.
부트 스트랩 클래스 로더 - JAVA_HOME\lib에 있는 코어 자바 API를 제공한다. 최상위 우선순위를 가진 클래스 로더
플랫폼 클래스로더 - JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 시스템 변수에 해당하는 위치에 있는 클래스를 읽는다.
애플리케이션 클래스로더 - 애플리케이션 클래스패스(애플리케이션 실행할 때 주는 -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치)에서 클래스를 읽는다
'Language > Java' 카테고리의 다른 글
함수형 인터페이스와 람다 표현식 소개 (0) | 2022.06.15 |
---|---|
java8과 java11 차이점 (0) | 2022.05.08 |
JVM 구조 (0) | 2022.05.05 |
네이버 페이 (Naver Pay) 기능구현 (0) | 2022.04.24 |
카카오 페이( Kakao pay) 기능구현 (2) | 2022.04.23 |