Handling memory leaks in Java programs
http://www.informationweek.com/news/mobility/smart_phones/showArticle.jhtml?articleID=224200357
Java에서는 garbage collector라는 기능이 제공이 되어 programmer가 별도의 memory관리를 할 필요가 없다.(일반적으로 그렇게 생각을 한다.) 그러나 java에서도 memory leak이라는 것이 발생한다고 하는데 대표적인 이유는 다음과 같다.
1. java에서는 전역변수가 없겠으나 static 변수를 instance로 생성하고 이를 계속적으로 사용하지 않는다면 이는 결국 memory space만을 불필요하게 잡게 되는데 이것을 memory leak으로 보게 된다.
2. 만일 어떠한 클래스의 instance가 계속적으로 heap에 살아있어야 한다면 가능한 다른 instance에 대한 참조는 조심해야한다. 왜냐하면 불필요하게 여러 instance를 참조하게 될 경우 해당 instance들이 또한 해제되지 못하게 되는 것이다.(garbage collector를 동작시켜도 이에 대한 heap 영역을 해제하지 못하게된다.
그렇다면 java에서는 이러한 heap관리를 garbage collector 외에 어떻게 할 수 있을까? 자료에서는 우선 object monitoring기능을 사용하여 object의 life cycle을 살펴볼 것을 권하고 있다. 예를 들면 특정 object가 의미없이 계속 살아 있고 GC를 동작시켜도 소멸되지 않는다면 leak으로 간주해야한다고 설명을 한다.
언급하면 이러한 object들은 다른 class에 의해 참조되어 소멸되지 못하게 될 수 있다. 때문에 이에 대한 추적을 위해서는 class간의 참조관계를 확인할 필요가 있다고 설명을 한다.