JVM 구조

dragonappear·2022년 8월 13일
0

JVM

목록 보기
1/6

출처

제목: "JVM ( JVM, Heap 구조 )"
작성자: velog(junny8643)
작성자 수정일: 2022년8월7일 
링크: https://velog.io/@junny8643/JVM
작성일: 2022년8월13일

JVM 이란?

  • Java Virtual Machine의 약자로써 JAVA 파일을 실행하는 일종의 소프트웨어이다.
  • Java를 독자적인 프로세스로 실행하는 Runtime Instance(데몬) 이다

JAVA에서 프로그램을 실행한다는 것은

  • 사용자가 작성한 Java Source File(.java)
  • 자바 컴파일러가 컴파일하여(Java Compiler -> javac.exe)
  • Java Byte Code(.class)를 생성한다.
  • 생성된 바이트 코드는 Class Loader에 로딩되어
  • Execution Engine을 통해서 해석하고
  • Runtime Data Areas에 배치되어 실직적인 실행이 이루어진다.

Runtime Data Area 구조

Method Area

  • Class, 변수 , Method, Static 변수 , 상수 정보 등이 저장되는 영역이다.

Heap Area

  • new로 생성된 인스턴스와 객체가 저장되는 영역이다.

Stack Area

  • Method의 값들이 저장되는 영역이다.(생명주기는 LIFO)

PC Register

  • 현재 수행 중인 명령의 주소값이 저장된다.

Native Method Stack

  • 다른 언어의 호출을 위해 할당되는 구역이다.

Heap Area

  • Array와 Object 두가지 종류만 저장되는 곳이며, 모든 Thread에 의해 공유되는 영역이다.
  • 흔히 서로 다른 쓰레드 사이에서 Heap Data를 이용할 때 동시성 문제가 발생한다

Heap Structure

  • Hotspot JVM의 Heap 구조
    • Young generation 과 Old generation 으로 이루어져 있다.

Hotspot JVM 참고: https://velog.io/@aki/HotSpot-JVM

Young generation

  • Eden, Survivor 영역으로 구성되어있다.

  • Eden

    • Object가 Heap에 가장 먼저 할당되는 구조이다.
    • 가득 차게 되면 참조 여부를 따져서 Survivor 영역으로 넘겨진다.
  • Survivor

    • Eden영역에서 살아남은 객체들이 머무르는 장소이다. Survivor 영역은 두개(S1,S2)로 구성되어있는데, Eden 영역의 대피는 둘 중 하나의 영역만 사용하게 된다.
    • Minor GC이 발생하는 구역이다.

Old generation

  • Young Generation에서 살아남은(특정 회수 이상 참조 된) Object가 이동 되는 영역이다.
  • 앞으로 사용될 확률이 높은 Object들을 저장하는 영역이며, 이 영역에 메모리도 충분하지 않으면 GC가 발생한다 (Full GC)

Permanent

  • Class, Method, Static 등이 저장되는 공간 ( 메타데이터 영역 )
  • JAVA 8 부터는 Perm은 Metaspace 로 전환 되었다. ( Heap이 아닌 Native 영역 )
  • JAVA 8 부터는 Perm의 상환값의 제한이 없기 때문에 Metaspace의 영역을 지정해서 메모리 누수를 지정해 줘야 할 때도 있다.
자바7자바8
용량82MB16ExaByte

0개의 댓글