[JVM] WANR! Collections & Memory Leak

2021. 12. 16. 17:08 JAVA/JVM

주의! 컬렉션과 메모리누수
List, Map, Set 같은 자바 컬렉션 클래스들을 사용할 때는 항상 주의해야한다!
컬렉션 클래스 안에 담겨있는 인스턴스는 프로그램에서 사용되든,안되든 모두 사용되는 것으로 판단되어 GC의 대상이 되지 않아 메모리 누수의 흔한 원인이 된다.
carMap에 담긴 car1,car2,car3 인스턴스들은 사용자에 의해 사용되지 않음에도 불구하고 JVM은 그것을 아직은.. 잡아내지 못한다. 때문에 그대로 놔두면 메모리누수가 발생한다.
컬렉션에서 인스턴스를 비워내야만 그때서야 car 인스턴스가 가비지 컬렉터에의해 소거된다.

위 프로그램을 돌리고 힙 히스토그램을 확인한 결과,
아래와 같이 jcmd를 이용해서 GC 후의 결과를 살펴보았음에도,
Car 인스턴스 3개가 소거되지 않고 남아있어서 메모리 누수를 발생시키고 있음을 볼 수 있다.