250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 강화학습
- 연결리스트 종류
- 백준 장학금
- 프로세스
- AVL트리
- 힙트리
- 최소힙
- HTTP
- 알고리즘
- spring
- 자료구조
- JPA
- jpa n+1 문제
- 연결리스트
- 백준장학금
- 운영체제
- 최대 힙
- MSA
- 점근적 표기법
- heapq
- 완전이진트리
- 스케줄링
- 엔티티 그래프
- SpringSecurity
- posix
- 이분탐색이란
- python
- Kruskal
- JVM
- 멀티프로세서
Archives
- Today
- Total
KKanging
JVM 클래스 로딩 과정 본문
JVM의 클래스 로딩 과정
JVM 의 바이트 코드 실행 전체 구조
- 자바 소스 파일을 컴파일 하여 자바 바이트 코드로 변환하면 제일 먼저 메인 메서드의 클래스가 클래스 로더에 의해 로드 된다.
- 클래스 로더에 의해 클래스의 정보 멤버 변수, 전역 변수, 상수, 메서드,, 등등이 Method Area에 점유하게 된다.
- 실행 엔진에 의해서 실행을 한다
- 이때 실행을 진행하다가 클래스가 참조 되어 있는 부분을 발견하면 클래스 로더로 로드 된 클래스인지 확인한다 (로드 된 클래스라면 그냥 Method Area에 가져다 쓸 것)
- 만약 로드 되지 않았다면 클래스 로더가 해당 클래스를 로드하고 초기화 한다.
- 다음 모든 경우에 클래스를 로드하고 초기화 한다.
- 생성자 호출(클래스 생성)
- 클래스의 메서드 호출(당연)
- 클래스의 전역 메서드 호출
- 클래스의 전역 변수 호출
- 다음 모든 경우에 클래스를 로드하고 초기화 한다.
- 이때 로드 됐을 때 런타임 상수 풀에 심볼릭 링크는 실제 주소로 변환된다.
- 이런 점이 리플랙션을 가능하게 하지만 리플랙션은 조금 더 동적인 실행 방식을 가진다. 리플랙션은 메서드 필드 마저도 동적으로 결정되기 때문
클래스 로더의 종류
Bootstrap Class Loader
- JVM을 실행하는데 필요한 클래스를 로딩하는 클래스 로더
제일 최상위 클래스 로더
Platform Class Loader
- java.lang.ClassLoader의 인스턴스로 Java SE platform API 등 자바에서 기본적으로 제공해주는 클래스를 로딩할 때 사용된다.
System Class Loader
- java.lang.ClassLoader의 인스턴스로 유저가 작성한 클래스를 로딩할 때 사용된다.
- ClassPath에 명시된 경로를 통해 클래스를 찾는다.
- Platform Class Loader를 부모로 가지고 있다.
- JAVA 8까지는 Applicaiton Class Loader로 불리다가 모듈 시스템이 도입되면서 Platform Class Loader로 명칭이 바뀌었다.
클래스 로더의 특징
- 계층 구조 : 클래스 로더는 계층 구조로 이루어져 있고, 상위 클래스 로더의 클래스는 하위 클래스에서 볼 수 있지만 그 반대는 불가능하다
- 위임 모델 : 클래스 로더는 실행 엔진으로 부터 로드 요청을 받으면 위에 부모 클래스 로더에 클래스 로딩 요청을 보낸다.
클래스 로더의 로딩 과정
로딩 → 링킹 → 초기화 과정을 거친다.
로딩
해당 바이트코드를 찾은 후 JVM의 메소드 영역에 구성하는 것 로딩할 때 부모 클래스가 존재한다면 부모 클래스 먼저 로딩을 진행한다. (즉, 부모 클래스 먼저 초기화 한다.)
링크
링크는 검증 준비 분석 3가지 과정을 거친다.
- 검증 : JVM 문법에 맞는지 검증
- 준비 : 정적 필드를 각 유형의 기본값으로 초기화하는 과정
- 분석 : 클래스의 런타임 상수 풀 안에 있는 심볼릭 참조를 물리 주소로 변환
초기화
클래스 초기화 함수를 실행한다. 클래스에 작성된 static 초기화 함수를 모두 합쳐 한꺼번에 실행한다. 초기화 과정은 로딩-검증-준비 과정이 모두 끝났을 때 한번만 실행된다.
'JAVA > JVM' 카테고리의 다른 글
JVM 가비지 컬렉터(GC) 기초 (0) | 2024.08.25 |
---|---|
JVM 메모리 구조 (0) | 2024.08.13 |
JVM 이란? (0) | 2024.08.13 |