C나 C++에서는 OS 레벨의 메모리에 직접 접근하기 때문에 free()를 호출하여 할당받았던 메모리를 명시적으로 해제해 주어야 한다. 그렇지 않으면 memory leak이 발생하게 되고, 현재 실행중인 프로그램에서 memory leak이 발생하면 다른 프로그램에도 영향을 끼칠 수 있다.
반면, 자바는 OS 의 메모리 영역에 직접적으로 접근하지 않고 JVM 이라는 가상머신을 이용해서 간접적으로 접근한다. JVM은 C로 쓰여진 또 다른 프로그램인데, Object가 필요해지지 않은 시점에서 알아서 free()를 수행하여 메모리를 확보한다. 웹 에플리케이션을 만들 때, 모든 것을 다 직접 개발하여 쓰기보다 검증된 라이브러리나 프레임워크를 이용하는 것이 더 안전하고 편리한 것처럼, 메모리 관리라는 까다로운 부분을 자바 가상머신에 모두 맡겨버리는 것이다.
프로그램 실행시 JVM 옵션을 주어서 OS에 요청한 사이즈 만큼의 메모리를 할당 받아서 실행하게 된다. 할당받은 이상의 메모리를 사용하게 되면 에러가 나면서 자동으로 프로그램이 종료된다. 그러므로 혀재 프로세스에서 메모리 누수가 발생하더라도 현재 실행중인 것만 죽고, 다른 것에는 영향을 주지않는다.
이렇게 자바는 가상머신을 사용함으로써 (운영체제로부터 독립적일아는 장점 외에도) OS 레벨에서의 memory leak은 불가능하게 된다는 장점이 있다.
또한 자바가 메모리 누수현상을 방지하는 또 다른 방법이 Garbage Collection이다.
가비지 컬렉션이라는 개념은 자바에서 처음 사용된 것이 아니다. 아무튼 프로그래머는 Heap을 사용할 수 있는 만큼 자유롭게 사용하고, 더 이상 사용되지 않는 Object들은 garbage collection을 담당하는 프로세스가 자동으로 메모리에서 제거하도록 하는 개념이다. 자바는 Heap 영역의 Object 중 stack 에서 도달 불가능한 (Unreachable) Object들은 Garbage Collection의 대상이 된다.