[Java] GC에 대한 나름의 이해

2023. 9. 22. 12:26Java

GC 공간 힙이고 new, old, permanent 영역으로 구성된다.

new는 eden과 두개의 survivor 영역으로 구성된다. 

eden은 최초로 만들어진 객체가 가는 곳이다. 이후 필요가 없어지면 처리되고 살아남으면 survivor에 가게 된다.

survivor은 하나가 가득 차게 되면 정리를 하고 여기서 살아남은 것 중 오래된 것은 old에 가게 된다. 그리고 얼마 되지 않은 것은 다른 survivor에 가고 원래의 survivor은 비워진 상태로 존재하게 된다. 이게 반복된다.

GC가 진행될 때는 stop-the-world가 발생하는데 GC 쓰레드를 제외한 모든 쓰레드가 멈추는 현상이다. 이때의 시간이 성능에 큰 영향을 미치는데 이를 줄이기 위한 방법론이 GC 튜닝이다. 

만약 old에서 new를 참조하고 있다면 이 old를 특별한 저장공간인 카드 테이블에 저장하고 이 부분만 참조해 old에서 new를 참조되고 있는지를 확인한다.

gc의 방법에는 serial gc, parellel gc 등이 있다. serial은 메모리가 적고 단일 cpu일 때 사용하고 parallel은 메모리가 많고 여러 코어를 사용할 수 있을때 사용한다. parellel이 훨씬 빠르다.

참고로 System.gc()를 사용하면 매우 느려지므로 사용하지 말아야 한다.

 

java9 부터는 g1 gc를 이용했다. 그 전에는 cms gc를 이용했다. g1 gc는 young에서 old로 가는 단계가 없어졌다고 볼 수 있다. 바둑판처럼 생겼다.


Reference


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

http://asfirstalways.tistory.com/158

 

#자바가상머신, JVM(Java Virtual Machine)이란 무엇인가?

#JVM이란?JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다 (가상머신이란 프로그램의 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것이다.) JVM

asfirstalways.tistory.com

http://asfirstalways.tistory.com/159

 

#가비지컬렉션(Garbage Collection) / JVM 구동원리에 이어서

#가비지 컬렉션, GC(Garbage Collection)Minor GC새로 생성된 대부분의 객체(Instance)는 Eden 영역에 위치한다. Eden영역에서 GC가 한 번 발생한 후 살아남은 객체는 Survivor 영역 중 하나로 이동된다. 이 과정을

asfirstalways.tistory.com

https://steady-coding.tistory.com/590

 

[Java] G1 GC의 동작 과정

java-study에서 스터디를 진행하고 있습니다. GC의 종류 이전 시간에 배웠던 GC의 종류를 간략하게 짚고 넘아가자. Serial GC 하나의 CPU로 Young 영역과 Old 영역을 연속적으로 처리하는 방식이다. GC가 수

steady-coding.tistory.com