public class Main {
public static void main(String[] args) {
String url = "https://";
url += "chaeekim.github.io";
System.out.println(url);
}
}
"https://"
가 할당 된다. "https://"
가 아닌, 새로운 객체인 https://chaeekim.github.io
을 참조한다."https://"
객체는 heap에는 존재하나, stack에서 참조할 수 없는 Unreachable객체가 된다.->JVM 의 Garbage Collector 는 Unreachable Object 를 우선적으로 메모리에서 제거하여 메모리 공간을 확보한다.
Mark and Sweep
이라고도 한다.먼저 Garbage Collectors (이하 GC) 의 동작을 이해하기 위해서는 JVM 의 메모리 관리에 대해 알아야 한다.
JVM에는 일반적으로 Young Generation / Old Generation 이라는 두가지의 물리적 공간이 존재한다.
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-의-개념과-동작-원리