| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- 백준
- Spring
- 리플렉션
- 문자열
- 스프링 시큐리티
- 파이썬
- 자바
- CS
- Junit5
- proxy
- Reflection
- 운영체제
- spring security
- MST
- redis
- 프록시
- 다이나믹 프록시
- 모던 자바 인 액션
- test
- 스프링
- 알고리즘
- 모던자바
- Python
- 약수
- OS
- BOJ
- Deadlock
- 최소 신장 트리
- java
- 객체지향
Archives
- Today
- Total
Dev 달팽이 @_''
Java - 클래스 로더 본문
Java - 클래스 로더

클래스 로더
- 로딩, 링크, 초기화 순으로 진행
- 로딩
- 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 "메소드" 영역에 저장.
- 이 때 메소드 영역에 저장하는 데이터
- FQCN(Fully Qualified Class Name)
- 클래스 | 인터페이스 | 이늄
- 메소드와 변수
- 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 "힙" 영역에 저장
- 링크
- Verify, Prepare, Resolve(optional) 세 단계로 나뉘어져 있다.
- Verify : .class 파일 형식이 유효한지 체크
- Preparation : 클래스 변수(static 변수)와 기본값에 필요한 메모리
- Resolve : 심볼릭 메모리 레퍼런스를 메소드 영역에 있는 실제 레퍼런스로 교체
- 초기화
- static 변수의 값을 할당한다. (static 블럭이 있다면 이때 실행)
- 클래스 로더는 계층구조로 이루어져 있으며 기본적으로 세가지 클래스 로더가 제공된다.
- 부트 스트랩 클래스 로더 - JAVA_HOME\lib에 있는 코어 자바 API를 제공한다. 최상위 우선순위를 가진 클래스 로더
- 플랫폼 클래스 로더 - JAVA_HOME\lib\ext 폴더 또는 java.ext.dirs 시스템 변수에 해당하는 위치에 있는 클래스를 읽는다.
- 애플리케이션 클래스 로더 - 애클리케이션 클래스 패스(애클리케이션 실행할 때 주는 -classpath 옵션 또는 java.class.path 환경 변수의 값에 해당하는 위치)에서 클래스를 읽는다.
- 최상위 클래스 로더인 부트 스트랩 클래스 로더부터 읽는다. 이를 못읽으면 하위 클래스 로더로 내려가면서 읽기를 시도한다.
'Java&Spring > 더 자바, 코드를 조작하는 다양한 방법' 카테고리의 다른 글
| Java - 리플렉션 API(클래스 정보 조회) (0) | 2022.01.09 |
|---|---|
| Java - 바이트코드 조작 (0) | 2022.01.09 |
| Java - 코드 커버리지 (0) | 2022.01.07 |
| Java - JVM 구조 (0) | 2022.01.06 |
| Java- JVM, JDK, JRE (0) | 2022.01.06 |