[슈퍼코딩] 40강 JVM 메모리 구조
자바는 두가지 시점이 중요하다.
컴파일 시점과 런타임 시점
Java는 어떤 방식으로 JVM위에서 돌아가고있는지 이해할 수 있다.
하울의 움직이는 성에서 불꽃이 그 성을 움직이는 원동력이라는데?
자바 소스코드 -> Byte Code
Byte Code가 010101은 아니지만 자바 소그코드와 010101 의 딱 중간이라고 함
그 바이트 코드가 JVM위에서 돌아가는 거임
JVM은 크게 3가지로 나뉨
1. Runtime Data Area
2. Class Loader
3. Execution Engine (실행엔진)
Class Loader: 호출에 대한 동작을 함
Execution Engine: 실행에 대한 동작
Runtime Data Area: 저장에 대한 동작
Ram에서 CPU돌아가는 것도 cpu가 ram에
저장하고 다시 ram에 있는걸 꺼내서 다시 계산하고 저장하고 이게 계속 반복이 되는 거잖아요?
자바도 사실 다 비슷한 원리다.
자바를 빌드하게 되면 out파일이 생긴다.
그러면 .class 파일이 생긴다.
그러면 Class Loader가
Loading -> Linking -> initialization 작업을 거치고 나서
Runtime Data Area로 가게된다.
JAVA JVM 클래스 로더 파헤쳐보기
Loading (로드): 클래스 파일을 가져와서 JVM메모리에 로드한다.
Linking (링크): 클래스 파일을 사용하기 위해 검증하는 과정이다.
클래스 변수들이 필요하다면 어떤 값들로 적절하게 초기화한다 (즉 int 같은 경우에는 0으로 초기화하고 String 같은 경우에는 null로 초기화한다. 이 뜻임)
Execution Engine:
인터프리터: 동시 통역
J IT 컴파일러: 반복문장 메모
가비지 컬렉터:
필요없는 데이터들을 수집해서 버리는 역할을 하는데 이게 중요하다고 함.
Modify Operation > Add VM options
ppt 명령어 그대로 복사하기
-Xlog:class+init
class Loader의 초기화를 볼 수 있는 옵션을 줘서 실행을 해보는거라고 함.
그러면 initializing 이라고 해서 되게 많이 뜬다.
그 다음 main 함수 실행하면
저희가 딱히 정의하지 않았어도
자바가 어떤 어플리케이션 실행하든지
기본적으로 실행을 하게되는
표준 api가 있다. 빌트인 클래스라고도 한다.
내가 정의한 클래스들을 확인하기 위해서는 exercise 키워드로 검색하면 된다고함.