Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

발전하는 개발자가 되자

JVM과 GC(Garbage Collection) 본문

개발공부/Java

JVM과 GC(Garbage Collection)

백경훈 2019. 5. 15. 17:03

JVM과 GC

JVM 이란?
GC 란?

JVM (Java Virtual Machine) 이란

자바 버추얼 머신으로 자바 프로그램이 컴파일 되고 class 파일이 만들어지면 그 클래스 파일을 기계어로 변화시키고 하는 명세 cpu 나 운영체제의 종류에 무관하게 동작한다 운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할을 한다.

JVM 메모리 구조

Method area, Heap area, Stack area, PC Register , Native method stack

  1. Method area : 상수, 메소드 클래스 코드가 적제되는 영역
  2. Heap area : new Car 와 같이 실제 객체, 전역변수 등이 적제되는 영역
  3. Stack area : Car car1 의 car1이 적제 되는 영역 new Car()의 주소를 참조한다.
  4. PC Register : Thread(쓰레드)가 생성될 때마다 생성되는 영역으로 Program Counter 즉, 현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역
  5. Native method stack : c, c++ 등의 코드를 실행하기 위한 영역

GC

가비지 컬렉션 : 메모리가 가득 차 발생하는 오버플로를 방지함 Parallel Collector 는 에덴, 서바이버1, 서바이버2, 올드로 구성이 되어있다.

GC 의 종류

Serial Collector - 쓰레드 1개가 GC 수행

Parallel Collector - 자바 버전7의 디폴트 GC, 여러개의 쓰레드가 동시에 '마이너' GC수행 ('메이저'GC는 여전히 싱글쓰레드)

CMS Collector : Full GC도 병렬 처리 (문제가 많아 쓰지 않음)

G1 Collector : 자바 버전9의 디폴트 GC, 사용은 자바 7버전부터 사용 가능 P GC 와 CMS를 조합한 형태

GC 동작 방식

  1. Parallel Collector (java7, java8 default)

    마이너 GC

    힙영역의 에덴에 객체가 생성되고 에딘이 가득차면 서바이버중 1개에 객체들을 옮긴다. 다시 에덴 데이터를 적제하고 가득찬다면 서바이버에 저장되있는 객체와 에덴이 있는객체중 중복된 객체를 다른 서바이버로 옮기고 카운트를 증가시킨다 이와 같이 반복시키고 일정 카운트 이상인 객체를 올드로 옮긴다.

    메이저 GC

    메이저 gc는 올드의 데이터를 처리하는것으로 마이너 GC보다 많은 메모리를 잡아먹는다. stop-the-world 가 발생한다. (GC 를 실행하기 위해 어플리케이션 실행이 멈춘다)

  2. G1 Collector (java9 default)
    Heap 영역을 여러개의 region 으로 나누어 동작. region 들을 eden, survivor, old 등으로 할당하고 사용 각각 크기를 가변적으로 사용가능하다. 지속적으로 region들을 한곳으로 모아 압축하여 공간을 확보한다. 또한 병렬적으로 각 영역을 마킹하고 회수하기 때문에 stop-the-world 시간이 줄고 처리 속도가 늘어났다.

참조

https://jeong-pro.tistory.com/148 [기본기를 쌓는 정아마추어 코딩블로그]

https://starblood.tistory.com/entry/Java8-G1-garbage-collection-특징 [Drink and Be happy]

https://d2.naver.com/helloworld/1329

https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html

'개발공부 > Java' 카테고리의 다른 글

객체지향설계의 5원칙 솔리드(SOLID)?  (2) 2019.05.06
equals 와 == 차이 (java)  (0) 2019.04.11
Java HashMap 이란  (0) 2019.02.12
JAVA 공부  (0) 2019.02.09
Comments