JVM 구조 & 메모리 영역

박윤택·2022년 5월 12일
2

JAVA

목록 보기
3/14

🤔JVM(Java Virtual Machine)

정의

자바 바이트 코드를 실행할 수 있는 주체, java 소스코드를 CPU가 인식하지 못하기 때문에 기계어로 컴파일하는 과정이 필요하다. 컴파일 과정이 끝나면 바이트 코드(.class)가 나온다. 그렇지만 바이트 코드는 기계어가 아니기 때문에 JVM이 바이트 코드를 OS가 이해할 수 있도록 해석해준다.

[자바 프로그램 실행 과정]

구조

JVM 구조는 JAVA를 만든 회사마다, 버전마다 다 다르다. 또한 JVM은 극한의 효율을 내기 위한 구조를 이루고 있다.

[JVM 구조]

🙄 메모리 영역

메모리 영역에서 크게 Method Area, Heap Area, Stack Area에 대해서 다뤄보려고 한다.


Method Area

Method Area, Class Area, Static Area 라고도 한다. 클래스 파일의 바이트 코드가 로드 되는 곳으로 메인 메소드에서 사용하는 클래스와 static 변수가 Method Area에 올라가게 된다.


Heap Area

new키워드를 이용해 생성한 인스턴스들이 힙영역에 놓이게 된다. 주소를 잃어버려 가비지 컬렉터에서 지워질때까지 또는 JVM이 종료될 때까지 유지된다. 인스턴스의 소멸 시점이 지역변수와 다르기 때문에 Heap Area에 놓이게 된다.


Stack Area

지역 변수와 매개 변수가 Stack Area에 놓이게 된다. 이는 선언된 블록 안에서만 유효한 변수들이다. 즉, 임시로 할당했다가 사용이 끝나면 바로 소멸되는 구조이다.


🛒 Garbage Collection

Garbage Collection은 프로그램에서 더이상 사용하지 않는 객체를 찾아 삭제하거나 제거하여 메모리를 확보하는 일을 한다.

Student student = new Student();
student.setAge(15);
student = null;
// 가비지 발생
student = new Student();
student.setAge(17);

student에 null을 할당함으로써 기존에 student가 가르키던 인스턴스와 참조변수 student의 연결이 끊어졌다. 이처럼 인스턴스를 아무도 참조하고 있지 않다면 메모리에 존재할 이유를 잃어버리게 된다. Garbage Collector(GC)는 참조되고 있지 않은 객체 및 변수들을 검색하여 메모리에서 삭제하여 공간을 확보한다.


동작 방식

JVM에서 Heap 영역은 처음 설계될 때 두가지를 전재로 하였다.

  • 대부분의 객체는 금방 접근 불가능한 상태가 된다.
  • 오래된 객체에서 새로운 객체로의 참조는 아주 적게 된다.

이는 즉 객체는 대부분 일회성, 메모리에 오랫동안 남아있는 경우는 드물다는 것을 의미한다. 따라서 생존 기간에 따라 Heap 영역 내에서도 따로 영역을 나누게 되는데 Young, Old 영역으로 나뉘게 된다.

Young 영역과 Old 영역은 서로 다른 메모리 구조로 구성되어 있기 때문에 세부적인 동작 방식은 다르지만 Garbage Collection이 실행될 때는 다음의 두가지 단계를 따른다.

1. Stop the World
Garbage Collection이 실행되기 위해 JVM이 어플리케이션의 실행을 멈추는 작업
작업이 완료되면 재개

2. Mark and Sweep
Mark : 사용되는 메모리와 사용하지 않는 메모리를 식별
Sweep : 사용되지 않는 메모리를 해제하는 작업


Young Generation(Young 영역)

  • 새롭게 생성된 객체가 할당되는 영역
  • 대부분의 객체가 금방 접근 불가능한 상태가 되기 때문에 많은 객체가 young 영역에 생성되었다가 사라진다.
  • Young 영역에 대한 Garbage Collection을 Minor GC라고 부른다.

Old Generation(Old 영역)

  • Young 영역에서 접근 가능한 상태를 유지하여 살아남은 객체가 복사되는 영역
  • 복사되는 과정에서 대부분 Young 영역보다 크게 할당되며, 크기가 큰 만큼 Garbage는 적게 발생한다. -> Young 영역의 수명이 짧은 객체들은 큰 공간을 필요하지 않기 때문
  • Old 영역에 대한 Garbage Collection을 Major GC 또는 Full GC라고 부른다.

GC 종류Minor GCMajor GC
대상YoungOld
실행 시점*Eden 영역이 꽉 찬 경우Old 영역이 꽉찬 경우
실행 속도빠름느림
  • Eden 영역 : 새로 생성된 객체가 할당되는 영역

0개의 댓글