C나 C++ 같은 언어에서는 개발자가 메모리를 할당받은 후 다 쓰면 직접 해제(free)해야 했습니다. 실수로 해제하지 않으면 메모리 누수(Memory Leak)가 발생하여 서버가 뻗어버립니다.
반면 자바는 백그라운드에 가비지 컬렉터(Garbage Collector, GC)라는 로봇 빗자루가 항상 돌아다닙니다. GC는 Heap 메모리를 주기적으로 스캔하면서, Stack이나 다른 곳에서 "더 이상 참조(연결)하고 있지 않은 외딴섬 객체"를 발견하면 알아서 메모리를 청소해 줍니다. 덕분에 자바 개발자는 메모리 해제 스트레스 없이 비즈니스 로직에만 집중할 수 있습니다.
자바의 객체는 하늘을 떠다니는 풍선(Heap 메모리)이고, 변수는 그 풍선을 잡고 있는 손(Stack 메모리)입니다.
개발자가 풍선 줄을 놓아버리면(변수 = null 대입), 풍선은 둥둥 떠다니는 쓰레기(Garbage)가 됩니다. 백그라운드에 숨어있던 로봇 청소기(GC)는 주기적으로 하늘을 순찰하다가 아무도 줄을 잡고 있지 않은 풍선을 발견하면 펑! 터트려서 공간을 비워버립니다.