JAVA_기초 공부

GC(Garbage Collector)에 대하여

메타듀 2023. 2. 17. 11:16
728x90
반응형

자바 애플리케이션은 JVM(Java Virtual Machine) 위에서 작동하는데, JVM이 작동할 때 메모리 구조와 GC는 애플리케이션의 응답 시간과 성능에 영향을 미친다.

GC

GC(Garbage Collection)
자바 애플리케이션에서 사용하지 않는 메모리를 자동으로 수거하는 기능.
메모리를 할당하고 직접 해제 해야하는 C언어 등과 달리 개발자들이 신경쓰지 않고 자바 GC를 이용하게 된다.

JVM 메모리 영역

  • Permanent Generation : Class, Method 등의 코드가 저장되는 영역. JVM에 의해서 사용. 생성된 객체 정보의 주소가 저장된 공간
  • Young Generation : 자바 객체가 생성되자마자 저장되고 생긴지 얼마 안 된 객체가 저장되는 곳. 자바 객체가 생성되면 이 영역에 저장되어 있다 시간이 지나 우선 순위가 낮아지면 Old 영역으로 옮겨짐.
    (eden Area: 객체들이 최초로 생성되는 공간)
    (Survivor Space: eden영역에서 참조되는 객체들이 저장되는 공간)
  • Old Area: Young Generation에서 저장되었던 객체 중 일정시간 이상이 지난 객체들이 저장되는 공간

GC는 Young Generation에서부터 수행한다.

eden 영역이 가득차게 되면 첫 번째 GC가 수행되고 S0 영역에 값을 복사한 후, S0 영역을 제외한 나머지 부분의 객체를 모두 삭제한다.

eden과 S0 영역의 메모리가 기준치 이상일 때는 eden과 S0영역에서 참조되고 있지 않은 데이터를 검사해서 참조하고 있는 메모리를 S1 영역에 복사한 후, S1을 제외한 나머지 영역의 객체를 다 제거한다.

이후에도 일정시간 이상 참조되고 있는 메모리를 Old Generation에 복사해서 위의 과정을 반복한다.

만약 이렇게 Old Generation에서 GC가 수행되면 Full GC라고 하며, 성능 저하를 불러오며 모든 프로세스는 정지된다.

반응형

'JAVA_기초 공부' 카테고리의 다른 글

[JAVA] Comparable / Comparator  (0) 2023.02.19
[JAVA] DAO 와 DTO  (0) 2023.02.17
[JAVA] java의 정규표현식  (0) 2023.02.17
[JAVA] 멀티쓰레딩이란  (0) 2023.02.17
[JAVA] Enum 으로 Singleton만들기  (0) 2023.02.17