JVM 구조 정리

GamSa Ham·2022년 12월 30일
post-thumbnail

.java 컴파일러가

.class 라는 바이트 코드로 바꾸어 준다.

ClassLoad 라는 항목은 .class 바이트코드를 모아서 Runtime Data Area 항목에 로드 시킨다.

모든 스레드는 MethodArea, Heap Area를 공유한다.

Stack Area, Program Counter Register, Native Method Stack 스레드 하나당 하나가 생성된다.

Method Area - 클래스 정보, 변수 정보, static 선언한 변수

Heap - 동적으로 생성된 객체가 저장되는곳 GC의 대상이 되는곳 레퍼런스 타입

Mark And Sweep 가비지 컬렉터 알고리즘 정리 필요

Stack - 지역변수 메서드 매개변수, 임시적으로 사용되는 변수 메서드의 정보

PC Register - 운영체제에 PC Register 항목을 말하는 것이 아니라 Thead가 현재 실행중인 JVM 명령어를 나타

낸다.

Native Method Stack - C/ C++ 를 실행 하기 위한 코드의 공간 JNI(Java Native Interface) 통해 호출하는 되는 것

Execution Engine

Runtime Area Data 영역에 저장된 바이트코드가 Execution Engine 을 통해서 해석될 차례다.

로드된 바이트코드를 실행하는 엔진

여기서 바이트 코드를 기계어로 바꾸는 작업이 필요한데

Interpreter

  • 명령어는 한줄 한줄 읽어서 실행하는 것이 인터프리터

JIT Compiler

  • 런타임시간에 한꺼번에 실행한다.

이제 이렇게 기계어로 해석된것이 다시 Runtime Data Area에 적제된다.

스레드 동기화, 가비지 컬렉션이 작업되게 된다.

Native Method Interface

  • JVM에 실행되는 코드중 네이트브로 실행하는 것이 있다면 해당 네이티브 코드를 호출하거나 호출 될수 할수 있도록 하는 프레임워크

Native Method Libraies

  • 네이티브 메소드 실행에 필요한 라이브러리

참조 문헌
https://www.youtube.com/watch?v=AWXPnMDZ9I0

profile
안녕하세요. 자바를 좋아하고 디자인 패턴, Refactoring, Clean Code에 관심이 많은 백엔드 개발자입니다.

0개의 댓글