개발햄비

[Java]GC(가비지 콜렉터)란? 본문

개발/java

[Java]GC(가비지 콜렉터)란?

개발햄 2019. 1. 6. 17:41

GC(가비지 콜렉터)란? garbage Collector

 

어떠한 객체가 만들어져 메모리의 한부분을 점유하게 되는데요 이 때

특정 메소드 호출한 후 수행이 완료되어 해당 객체가 더이상 필요없는 객체가 남게 됩니다.

필요없는 객체가 남게 되면 쓰레기가 쌓여 처리속도에 영향을 미칠 수 있습니다.

 

이것을 정리하는 것이 바로 garbage Collector GC 라고합니다.

 

가비지 콜렉터의 구조는 다음과 같습니다 

 

 

 

 

 

 Java 메모리 구조는 heap, perm, Thread로 나뉘고 heap은 Young과  old로 나뉘게 됩니다.

 

 Young : new를 통해 생성된 인스턴스를 Eden영역에 저장합니다.

 

 Old : Young영역에 존재하던 객체들이 계속 사용되거나 , 생존, 오래되어 저장되는 영역입니다.

 

 Perm영역은 class 또는  Method 코드가 저장되는 영역입니다.

Garbege Collection 종류

 

§  Minor GC
자바의 GC 크게  가지로 Minor GC Full GC 나눌수 있습니다.   Minor GC Young영역에 발생하는 GC 나타냅니다동작방식은 아래와 같습니다.

 

 

 

1) 처음 Minor GC 발생하기  할당되어있는 모든 객체들은 Eden영역에만 존재하게됩니다. 이때 Minor GC 발생하면 Eden영역  활성객체가 Survivor1영역으로이동됩니다.   비활성 객체만 남은 Eden영역이 클리어됩니다.


2) 
다음 Minor GC 발생하면 처음 Minor GC이후 생성된 객체들이 존재하는Eden영역과 처음 Minor GC이후 생존한 객체들이 저장된 Survivor1 영역에서존재하는 활성객체들이 Survivor2 이동되고 Eden영역과 Survivor1영역이 클리어됩니다.


3) 
   작업이 Survivor1 Survivor2 번갈아가면서 계속 수행되고 계속해서활성객체로 생존하는 객체들은 시간이 지남에 따라 Old영역으로 이동됩니다.

 

§  Full GC
위에서 Minor GC Young영역의 GC라고 하였습니다.

 

이와 상응되게 Full GCOld영역에 발생하는 GC 나타냅니다.

 

FullGC 특정 순서가 있는 작업을 수행한다기보다 Old영역을 스캔하여 객체들의 참조상태를 표시하고    

참조되지 않는 객체를해제(Mark&Compact)하는 작업을 나타냅니다. 

 

이러한 FullGC 속도가 느리고성능에 아주  영향이 있습니다. 

 

이유는 Full GC 수행되는 동안 자바 애플리케이션의멈춤현상이 동행되기 때문입니다.