ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JVM 기초 원리
    JAVA공부/JVM 2021. 12. 31. 03:32

     

    JVM 구조

    Class Loader

               Class파일들을 읽어서 Runtime Data Area에있는 각 영역에 맞는 정보들을 적재하는 역할을 한다.

     

     

    Execution Engine

               Method Area의 바이트 코드를 제공받아, class에 정의된 내용대로 바이트 코드를 실행 한다.

               실행방식에는 Interpreter, JIT(Just In Time)가 있다.

    • Interpreter  - 바이트 코드를 한줄 씩 해석하여 실행하는 방식이라 속도가 느리다.
    • JIT (Just In Time) - 바이트 코드를 컴퓨터 프로세서(CPU) 직접 보낼 수 있는 명령어로 바꾸는 프로그램이다. (컴파일) 

               ※JIT 는 이미 한번 읽어서 기계어로 변경한 소스코드는 또, 컴파일하지 않으며 저장소에 기계어로 저장한다.

                  따라서  인터프리터를 보조하여 반복적인 일을 감소시켜준다. 

                  

                 

    Garbage Collector

               Runtime Data Area에 있는 Heap 영역에 생성된 객체들중 참조되지 않는 객체들을 제거하는 일을 한다.

               GC 에는 Minor GC , Major GC가 있다.

     

    • Minor GC - Young 영역 (EDEN , SURVIVOR1 , SURVIVOR2) 에 대한 관리를 한다. 참조 되지 않는 객체는  제거하고 참조되는 객체는 다음영역으로 넘기게 된다.
    • Major GC -  Old영역 (Tenured, Permanent)에 대한 관리를 한다. 마찬가지로 참조되지 않는 객체는 제거  되는데,  메모리가 가득찰시에 발생을한다. 근데 Major GC는 모든 객체를 검사하기 때문에  모든 Thread가 멈추게 되어 애플리케이션이 일시 중지되게 된다. 이에따라 GC 튜닝이 필요하다.
    영역 용도 보존기간 스레드 
    Method Area 가장 먼저 데이터가 저장되며
    필드정보, 클래스, 메서드
    Static 변수, 전역변수
    타입정보 등이
    보관된다.
    프로그램 시작 ~ 종료시
    NULL 선언시 GC 청소
    모든 스레드 공유
    Heap Area 참조형 데이터 타입이 저장
    (new 연산자 통해
    생성된 객체)
    더이상 참조되지 않거나
    NULL 선언시 GC 청소
    Stack Area 기본형 데이터타입 저장
    지역,매개,리턴값,참조변수
    저장
    메서드 호출 시 FILO로 생성,
    스택프레임 생성
    (메서드만의 방)
    끝날때 LIFO로 제거
    메소드가 끝날 때까지 스레드 별로 생성
    PC Register 명령어의 주소를
    저장하는 공간
    스레드 시작시 생성
    Native Method Stack 자바외 다른 언어로 작성된 코드를 수행하기 위한 영역
    java native interface 를 통해 바이트코드로 변환
    Java Native Interface 호출
    및 종료시 생성

     

     

     

    일반적인 코드 형태

     

     

     

     

    'JAVA공부 > JVM' 카테고리의 다른 글

    자바 Heap Dump  (0) 2022.11.04
    GC 튜닝  (0) 2022.01.14
    Garbage Collection 모니터링  (0) 2022.01.12
    GC(Garbage Collection) 컬렉션 과 Heap 영역  (0) 2022.01.06
    JDK, JRE  (0) 2021.12.30
Designed by Tistory.