해당 경로에는 바이트코드가 들어있다.
코드로 보이는 이유는 javap 같은 것을 사용해서
사람이 볼 수 있게 코드로 보여준다.
원래는 바이트 코드가 있음.
클래스 로더 시스템
-
. class에서. class에서 바이트코드를 읽고 메모리에 저장
-
로딩: 클래스 읽어오는 과정
-
링크: 레퍼런스를 연결하는 과정
-
초기화: static 값들 초기화 및 변수에 할당
메모리
-
메서드 영역에는 클래스 수준의 정보 (클래스 이름, 부모 클래스 이름, 메서드, 변수) 저장. 공유 자원이다.
-
힙 영역에는 객체를 저장. 공유 자원이다.
[아래 부분은 위의 영역과 달리 다른 모든 부분에 공유하지 않는다.] - 스택 영역에는 쓰레드 마다 런타임 스택을 만들고, 그 안에 메서드 호출을 스택 프레임이라 부르는 블록으로 쌓는다. 스레드 종료하면 런타임 스택도 사라진다.
스택 프레임 : method call
에러 메세지 로그들을 보면 메서드가 여러 개 전시되는 것을 볼 수 있다.
-
PC(Program Counter) 레지스터: 스레드마다 스레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성된다.
-
네이티브 메소드 스택 (이것도 스레드마다 생긴다.)
https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Program_Counter_PC_Register
해당 내용은 자바 프로파일링 할때 사용한다.
네이티브 메서드란?
메서드의 구현을 자바가 아닌 C나 C++로 하는 경우
ex) Thread.currentThread();
실행 엔진
바이트코드를 인터프리터가 해석
한 줄씩 실행
한줄 씩 실행하면서 네이티브 코드로 변형한다.(기계가 이해할 수 있게)
-
인터프리터: 바이트 코드를 한 줄 씩 실행. -> 한줄마다 네이티브 코드로 한줄 한줄 컴파일
-
JIT 컴파일러(바이트코드를 네이티브 파일로 컴파일): 인터프리터 효율을 높이기 위해, 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러로 반복되는 코드를 모두 네이티브 코드로 바꿔둔다. 그다음부터 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용한다.
-
GC(Garbage Collector): 더 이상 참조되지 않는 객체를 모아서 정리한다.
References
'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 |