더 자바 강의 정리(3강)

Class loader

  • 로딩(loading), 링크(linking), 초기화(initialization) 순으로 진행
  • 로딩
    • 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 메모리의 메소드영역에 저장
    • 메소드 영역에 저장하는 데이터
      • FQCN(Fully Qualified Class Name)
      • class, interface, enum
      • 메소드, 변수
    • 로딩이 끝나면 해당 클래스 타입의 class 객체를 생성하여 영역에 저장
  • 링크
    • verify, prepare, resolve(optional) 세 단계로 나뉨
    • verify: .class 파일 형식이 유효한지 체크
    • preparation: 클래스 변수(static 변수)와 기본값에 필요한 메모리 준비
    • resolve: 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체
  • 초기화
    • static 변수의 값을 할당 (static 블럭이 있다면 이때 실행됨)
  • 클래스 로더는 계층 구조로 이뤄져있으며 기본적으로 세 가지 클래스 로더 제공