본문 바로가기
Language/Java

Garbage Collection 쉽게 정리!

by 나비와꽃기린 2019. 6. 21.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


Garbage Collection 이란?



객체지향언어인 JAVA의 강점 및 특징 중 하나로

절차지향언어인 C와는 개발자가 메모리 관리에 신경쓰지 않아도 된다라는 것이다.

C같은 경우는 개발자가 직접 메모리 해제를 해줘야 함.

메모리정리를 해주는 주체를 Garbage Colletor라고 하는데 가비지콜렉터는 자바벤더, 버전, GC정책에 따라 다소 차이가 있긴 하지만 공통적으로는 메모리 정리가 필요한

객체를 식별하여 메모리를 정리해 여유메모리를 확보해주는 역할을 한다.


개발자가 메모리 관리를 하지 않아도 된다라고 하지만 100%그렇지만은 않다.

간혹 GC매커니즘이 문제를 유발하기도 하는데

GC 종류 중, Full GC 가 발생하면 모든 어플리케이션이 중단되기도 하기 때문이다.

이를 업계에선 stop-the-world 라고 함.



GC를 알기 위해선 일단 Hotspot VM에 관한 기본 개념을 알고 있어야 한다.



(1) New Generation(Young Generation) = Eden + Survivor1 + Survivior2 공간으로 나뉘어진다.

Eden은 YG영역에서 가장 최근에 생성한 객체가 위치하는 공간이며

Minor GC가 발생할 때, 여기에 있는 객체들이 Survivor 영역으로 이동하게 된다.

(2) Old Generation 

YG영역에서 넘어온 객체들의 공간

(3) Perm Generation

YG,OG와는 달리 객체를 위한 공간이 아닌 클래스정보를 저장하는 공간.

간혹 어플리케이션에서 동적으로 많은 클래스를 생성할 경우 이 영역이 부족해 질 수 있어서 -XX:PermSize(초기값) -XX:MaxPermSize(최대값)





GC모니터링에 로그생성은 필수!

[GC 로그 남기는 방법]



-verbose:gc 옵션으로 로그생성을 해주는 옵션을 걸어두자.

-해당 옵션을 통한 로그는 기본적으로 Standard Output(stdout)에 출력된다. 

사용방법 : $CATALINA_OPTS='-verbose:gc"

               $export CATALINA_OPTS




-stdout말고 별도의 파일로 log를 기록하여 분석하고 싶다면 -Xloggc옵션을 사용한다.

사용방법 : $CATALINA_OPTS='-Xloggc:/app/apache-tomcat-7.x.x/logs/gc.logs"

               $export CATALINA_OPTS

-조금 더 상세한 log를 남기고 싶다면 다음 옵션까지 추가.

사용방법 : $CATALINA_OPTS='-Xloggc:/app/apache-tomcat-7.x.x/logs/gc.logs -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

               $export CATALINA_OPTS



-gc log는 직접 분석하거나 또는 별도의 분석툴을 사용하여 분석할 수 있다.