참고문헌
DZone - "Java Memory Management"
DZone - "The JVM Architecture Explained"
Oracle - "Java Garbage Collection Basics"
Mohammed Aboullaite - "Understanding JIT compiler (just-in-time compiler)"
sgwon1996 - JVM 구조와 JAVA의 동작 원리 (velog) - 개인적으로 이 글을 추천합니다.
joona - JAVA는 컴파일 언어일까, 인터프리터 언어일까? (tistory)
주누 - [autoBoxing, unBoxing의 이해]
글 읽는 순서 추천 가이드라인
1. 참고 문헌의 링크들을 다 읽는다.
2. 아래 글을 슥 보면서 keyword만 얻어간다.
3. keyword를 구글링 하면서 추가적인 학습을 한다.
4. 아직 배움이 부족해 부득이하게 가이드라인을 제시하는 글쓴이의 마음을 이해해준다.
코드가 실행되는 과정
JRE(Java Runtime Environment)
JVM 구조
JVM 구조
- 클래스 로더 서브시스템
- .class 에서 바이트코드를 읽고 메모리에 저장.
- 메모리
- 메소드 영역(Method Area).
- 힙 영역에는 객체를 저장.
- 스택 영역에는 스레드마다 런타임 스택을 만들고, 스택 프레임이라 부르는 블록을 쌓는다.
- 실행엔진
- JIT 컴파일러가 반복되는 코드를 재사용해서 속도를 높인다.
- GC : 더이상 참조되지 않는 객체를 모아서 정리한다.
- JNI(Java Native Interface)
- C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법 제공.
- 자바에서 기본으로 제공되는 메서드에 native 키워드를 가 붙은 친구.
- 네이티브 메소드 라이브러리.
Class Loader Subsystem ->> 참고링크: JVM Architecture
- Loading
- 클래스 로더가 .class 파일을 읽고 데이터를 “Method Area”영역에 저장
- 메소드 영역에 저장하는 데이터들
1) FQCN(Fully Qualified Class Name) : package를 포함한 Class이름
2) 클래스 | 인터페이스 | 이늄
3) 메소드와 변수
- Linking
- Initialization
- “Static“ 붙은 친구들 초기화. static 블럭 실행
Stack & Frame
Stack
- Stacke은 Frame이라는 자료구조를 저장한다.
- Stack은 C 같이 전통적인 언어의 스택 구조와 비슷하다.
- 지역 변수, 함수의 실행 결과를 저장하며 함수 호출과 반환을 담당한다.
Frame
- 프레임은 데이터, 반환 값을 저장하는 자료구조이다.
- 프레임은 함수가 호출될 때 생성되고 함수가 종료되면 사라진다.
- 각 프레임은 지역 변수 배열, Operand Stack, Run Time Constant Pool에 대한 참조값을 지닌다.
- 클래스파일의 함수에 대한 접근은 Runtime Constant Pool에 존재하는 심볼릭 링크를 통해 접근 가능하다.
- 동적 할당은 코드 실행 시점에 심볼릭 링크를 해석해 고정된 주소값으로 변환시킨다.
- 심볼릭 링크를 통한 late-binding은 객체 지향의 핵심이다.
심볼릭 링크??? - [참고영상 "생활코딩 - 참조와 복제"]
추가공부 (실행엔진과 Garbage Collector)
실행엔진
Garbage Collector
Keyword
- Block, Scope
- Auto Boxing / Unboxing
- Call By Value
- Mutable / Immutable