Java 메모리 관리 2

leocodms·2021년 1월 28일
0

Java

목록 보기
5/10

Garbage Collection

간단하게..

public class Main {
    public static void main(String[] args) {
        String url = "https://";
        url += "chaeekim.github.io";
        System.out.println(url);
    }
}
  • url에 "https://"가 할당 된다.
  • +=연산에 의해 stack의 url변수는 더이상 "https://"가 아닌, 새로운 객체인 https://chaeekim.github.io을 참조한다.
  • 따라서, "https://"객체는 heap에는 존재하나, stack에서 참조할 수 없는 Unreachable객체가 된다.

->JVM 의 Garbage Collector 는 Unreachable Object 를 우선적으로 메모리에서 제거하여 메모리 공간을 확보한다.

  • Garbage Collection은 Mark and Sweep이라고도 한다.
    ->garbage가 아닌 것을 marking하고 나머지를 지워버리는 것이다.

Garbage Collection?!

먼저 Garbage Collectors (이하 GC) 의 동작을 이해하기 위해서는 JVM 의 메모리 관리에 대해 알아야 한다.
JVM에는 일반적으로 Young Generation / Old Generation 이라는 두가지의 물리적 공간이 존재한다.

  • Young Generation 영역 : 새롭게 생성한 객체가 위치한다. 많은 객체가 이 영역에 생성되었다 사라지며 이를 Minor GC라고 한다.
  • Old Generation 영역 : 접근불가능한 상태가 되지않아 Young 영역에서 살아남은 객체가 이 영역으로 복사된다. Young 영역보다 크게 할당되며 GC는 적게 발생한다. 이 영역에서 객체가 사라질 때 Major GC 또는 Full GC 가 발생한다.

Young 영역은 Eden 영역과 2개의 Survivor 영역으로나뉜다. New 를 이용해서 객체를 생성하면 이는 Eden 영역에 위치하게 된다. Eden 영역에서 GC가 한번 발생 후 살아남은 객체는 Survivor 영역 중 하나로 이동한다. 이 때 객체가 Eden 영역에서 Survivor1, Survivor2 영역으로 이동할 때 Minor GC 가 수행된다.

2개의 Survivor 영역에 모두 데이터가 존재하거나 모두 사용량이 0이면 시스템은 비정상이다. Old 영역은 기본적으로 데이터가 가득차면 GC를 수행하며 GC 방식은 JDK 7 기준으로 5가지가 있다.


[참조]
https://jins-dev.tistory.com/entry/가비지-컬렉터Garbage-Collector-의-개념과-동작-원리

profile
Backend Developer

0개의 댓글