클래스 로더

이연중·2021년 1월 21일
0

JAVA

목록 보기
3/20

.class 에서 바이트 코드를 읽고 메모리에 저장하는 역할 수행

클래스 로더
  • 작성한 코드 대부분은 app 클래스 로더가 읽음.

    클래스를 읽을 때, 부모 클래스에게 먼저 요청. 모든 부모 클래스가 읽지 못했을 때 자신이 읽음.

    자신도 읽지 못하면 -> ClassNotFoundException

  • 로딩 -> 링크 -> 초기화

  • 부트 스트랩 클래스 로더 - JAVA_HOME\lib에 있는 코어 자바 API를 제공(네이티브 코드로 구현되어 있어 일반적으로 참조 힘듦)
    플랫폼 클래스 로더 - JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 시스템 변수에 해당하는 위치에 있는 클래스를 읽음
    애플리케이션 클래스 로더 - 애플리케이션 클래스 패스(애플리케이션 실행 시 주는 -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치)에서 클래스를 읽음

  • 로딩

    • 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 메소드 영역에 저장
    • 저장 데이터: FQCN(Fully Qualified Class Name), 클래스, 인터페이스, 이늄, 메소드와 변수
    • 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 영역에 저장
  • 링크

    • Verify, Prepare, Resolve(Optional) 세단계
    • Verify: .class 파일 형식이 유효한지 체크
    • Prepare: 클래스 변수(static 변수)와 기본값에 필요한 메모리 준비
    • Resolve: 심볼릭 메모리 레퍼런스(논리적)를 메소드 영역에 있는 실제 레퍼런스로 교체(Optional)
  • 초기화

    • static 변수의 값을 할당. (static 블럭이 있다면 이때 실행)

참고

https://www.inflearn.com/course/the-java-code-manipulation

profile
Always's Archives

0개의 댓글