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 | 31 |
Tags
- Spring
- dfs
- 객체지향
- 부트스트랩 클래스 로더
- 파이썬 문자열 메서드
- 어플리케이션 클래스 로더
- 파이썬
- aws saa-c03
- python
- 클래스 로더 계층
- 알고리즘
- 딕셔너리
- 파이썬 리스트 메서드
- BFS
- 스프링 컨테이너
- 심볼릭 레퍼런스
- AWS SAA-C03 합격후기
- 다이렉트 레퍼런스
- python list method
- 플랫폼 클래스 로더
- 자료구조
- stop the world
- 컴포넌트 스캔
- 2026 AWS SAA-C03
- getreference
- 백준
- 자바
- java
- 코딩테스트
- 스프링
Archives
- Today
- Total
클라우드 낚시꾼
[JAVA] 심볼릭 레퍼런스와 다이렉트 레퍼런스 본문
728x90
심볼릭 레퍼런스와 다이렉트 레퍼런스
- 심볼릭 레퍼런스: 클래스 파일 내에 사용되는 기호적인 참조를 의미한다. (클래스 이름, 메서드 이름 등)
- 다이렉트 레퍼런스: 실제 메모리 주소나 런타임 시점에 참조할 수 있는 위치를 의미한다.
심볼릭 레퍼런스를 다이렉트 레퍼런스로 변환하는 이유
심볼릭 레퍼런스는 메모리 주소나 위치를 직접 나타내지 않으므로, 실행 시 마다 이를 반복적으로 확인하면 성능이 저하될 수 있다. 다이렉트 레퍼런스는 JVM이 런타임 시점에 해당 참조를 빠르게 액세스할 수 있기에 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변환한다.
심볼릭 레퍼런스를 다이렉트 레퍼런스로 변환하는 과정
- 로딩 및 검증 단계: JVM은 클래스 파일을 읽어드린 후, 심볼릭 레퍼런스가 참조하는 대상이 존재하는 지 확인한다.
- 해석 단계: JVM은 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변환한다. 이 과정에서 실제 메모리의 위치나 실행 시점에 참조할 수 있는 위치가 확정된다.
심볼릭 레퍼런스를 다이렉트 레퍼런스로 변환하는 예시
1. 로딩 및 검증 단계
자바 소스 코드에서 System.out.println("Hello")는 System이라는 클래스의 out이라는 PrintStream 객체의 println 메서드를 호출하는 심볼릭 레퍼런스이다. 컴파일된 바이트코드에서는 메서드 호출이 invokestatic 명령어로 명시되며, 심볼릭 레퍼런스를 통해 java/lang/System 클래스와 println 메서드를 참조하게 된다,
2. 해석 단계
JVM이 클래스를 로드하고 검증 및 해석 과정을 거치면, System.out과 println 메서드의 실제 메모리 주소나 런타임 위치에 대한 다이렉트 레퍼런스를 생성한다. 이후에는 이 다이렉트 레퍼런스를 통해 빠르게 메서드를 호출할 수 있다.
728x90
'Programming Language > JAVA' 카테고리의 다른 글
| [JAVA] STW(Stop-The-World) 문제와 발생 이유 (0) | 2024.11.13 |
|---|---|
| [JAVA] JVM의 클래스 로더 알아보기 (1) | 2024.11.12 |
| [JAVA 자바] 변수의 종류와 초기화 + Null (0) | 2023.12.31 |
| [JAVA 자바] 기본형과 참조형 + Call by Value (1) | 2023.12.29 |
| [JAVA 자바] 클래스와 객체 생성 + 내부 동작 알아보기 (0) | 2023.12.29 |