해당 경로에는 바이트코드가 들어있다.
코드로 보이는 이유는 javap 같은 것을 사용해서
사람이 볼 수 있게 코드로 보여준다.
원래는 바이트 코드가 있음.
클래스 로더 시스템
-
. class에서. class에서 바이트코드를 읽고 메모리에 저장
-
로딩: 클래스 읽어오는 과정
-
링크: 레퍼런스를 연결하는 과정
-
초기화: static 값들 초기화 및 변수에 할당
메모리
-
메서드 영역에는 클래스 수준의 정보 (클래스 이름, 부모 클래스 이름, 메서드, 변수) 저장. 공유 자원이다.
-
힙 영역에는 객체를 저장. 공유 자원이다.
[아래 부분은 위의 영역과 달리 다른 모든 부분에 공유하지 않는다.] - 스택 영역에는 쓰레드 마다 런타임 스택을 만들고, 그 안에 메서드 호출을 스택 프레임이라 부르는 블록으로 쌓는다. 스레드 종료하면 런타임 스택도 사라진다.
스택 프레임 : method call
에러 메세지 로그들을 보면 메서드가 여러 개 전시되는 것을 볼 수 있다.
-
PC(Program Counter) 레지스터: 스레드마다 스레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성된다.
-
네이티브 메소드 스택 (이것도 스레드마다 생긴다.)
https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Program_Counter_PC_Register
Java JVM Run-time Data Areas - Javapapers
Understanding Java Virtual Machine (JVM) run-time data areas are critical to better Java programming. One of the most dreaded errors in Java
javapapers.com
해당 내용은 자바 프로파일링 할때 사용한다.
네이티브 메서드란?
메서드의 구현을 자바가 아닌 C나 C++로 하는 경우
ex) Thread.currentThread();
A Simple Java Native Interface (JNI) example in Java and Scala
The Java Native Interface (JNI) is a framework that allows your Java code to call native applications and libraries written in languages…
medium.com
실행 엔진
바이트코드를 인터프리터가 해석
한 줄씩 실행
한줄 씩 실행하면서 네이티브 코드로 변형한다.(기계가 이해할 수 있게)
-
인터프리터: 바이트 코드를 한 줄 씩 실행. -> 한줄마다 네이티브 코드로 한줄 한줄 컴파일
-
JIT 컴파일러(바이트코드를 네이티브 파일로 컴파일): 인터프리터 효율을 높이기 위해, 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러로 반복되는 코드를 모두 네이티브 코드로 바꿔둔다. 그다음부터 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용한다.
-
GC(Garbage Collector): 더 이상 참조되지 않는 객체를 모아서 정리한다.
References
JVM Internals
Explains the internal architecture of the Java Virtual Machine (JVM) in simple terms using showing key components and how memory is updated during execution.
blog.jamesdbloom.com
The JVM Architecture Explained - DZone Java
This post explores the JVM architecture, what it is, how it operates, why it's useful, and presents a helpful diagram that highlights major JVM functionalities.
dzone.com
How JVM Works - JVM Architecture? - GeeksforGeeks
JVM(Java Virtual Machine) acts as a run-time engine to run Java applications. JVM is the one that actually calls the main method present in a… Read More »
www.geeksforgeeks.org
'Java > Java' 카테고리의 다른 글
(JAVA) 바이트코드 조작(1) (0) | 2019.12.22 |
---|---|
(JAVA) 클래스로더 (0) | 2019.12.21 |
(JAVA) 자바, JVM, JDK 그리고 JRE (0) | 2019.12.21 |
(Effective Java) 아이템 4. 인스턴스를 막으려거든 private 생성자를 사용하라 (0) | 2019.12.15 |
(Effective Java) 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2019.12.15 |