본문 바로가기
개념

[개념] 메모리 누수(Memory Leak) 현상

by hs_seo 2019. 7. 2.

프로그래밍에서 메모리 누수현상(Memory Leak)은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다.

자바의 메모리 누수

자바에서 메모리 누수는 더이상 사용하지 않는 객체가 가비지 컬렉션(GC)에 의해서 회수되지 않고 계속 누적되는 현상입니다. Old 영역에 누적된 객체로 인해서 메이저 GC가 빈번하게 발생하게 되고, 프로그램의 응답속도가 늦어지다 결국 OOM(OutOfMemory) 오류로 프로그램이 종료됩니다.

주로 빈번한 전역변수의 선언이나, 리스트나 해쉬맵 같은 콜렉션에 저장한 객체를 해제하지 않고 계속 유지하게 되면서 주로 발생합니다. 

 

다음의 dzone 기사를 보면 Java 에서 메모리릭이 일어는 경우를 5가지 예를 들어서 코드와 함께 설명하고 있습니다.

 

https://dzone.com/articles/memory-leak-andjava-code

 

Memory Leaks and Java Code - DZone Java

When you aren't using objects, but they aren't touched by GC, a memory leak happens. Here are six ways memory leaks happen to look for and avoid.

dzone.com

자바의 메모리 누수 예제

  1. Integer, Long 같은 래퍼 클래스(Wrapper)를 이용하여, 무의미한 객체를 생성하는 경우
  2. 맵에 캐쉬 데이터를 선언하고 해제하지 않는 경우
  3. 스트림 객체를 사용하고 닫지 않는 경우
  4. 맵의 키를 사용자 객체로 정의하면서 equals(), hashcode()를 재정의 하지 않아서 같은 키로 착각하여 데이터가 계속 쌓이게 되는 경우
  5. 맵의 키를 사용자 객체로 정의하면서 equals(), hashcode()를 재정의 하였지만, 키값이 불변(Immutable) 데이터가 아니라서 데이터 비교시 계속 변하게 되는 경우
  6. 자료구조를 생성하여 사용하면서, 구현 오류로 인해 메모리를 해제하지 않는 경우

 

반응형