메모리 관리와 가비지 컬렉터 (Garbage Collection)
C나 C++에서는 개발자가 메모리 할당을 받은 후 다 쓰면 직접 해제(free)해야 했습니다. 실수로 해제하지 않으면 메모리 누수(Memory Leak)가 발생하여 서버가 다운됩니다.
반면 자바는 백그라운드에 가비지 컬렉터(Garbage Collector, GC)라는 로봇 빗자루가 돌아다닙니다. GC는 Heap 메모리를 주기적으로 스캔하면서, Stack이나 다른 곳에서 "더 이상 참조(연결)하고 있지 않은 외딴섬 객체"를 발견하면 알아서 메모리를 청소해 줍니다. 덕분에 개발자는 비즈니스 로직에만 집중할 수 있습니다.
public class Main {
public static void main(String[] args) {
// 객체 생성: Heap 메모리에 공간 할당, user 변수는 그 주소를 가짐
String user = new String("홍길동");
System.out.println("현재 유저: " + user);
// 변수에 null을 대입하여 Heap 객체와의 '연결 고리'를 끊음
user = null;
// 이제 "홍길동" 객체는 메모리에 존재하지만, 접근할 방법이 없는 '외딴 섬(Unreachable)'이 됩니다.
// 백그라운드에서 돌고 있는 Garbage Collector(GC)가 주기적으로
// 이런 고아 객체들을 찾아내어 메모리에서 영구히 삭제(청소)합니다.
// 개발자가 원한다면 GC에게 "지금 웬만하면 청소 좀 해줘" 라고 요청할 순 있지만,
// 실제 청소를 언제 할지는 100% JVM 맘입니다. (실무에선 직접 호출을 권장하지 않음)
System.gc();
System.out.println("안심하세요! JVM이 알아서 메모리를 관리해줍니다.");
}
}