Memory Leak이란 무엇일까?

2020. 8. 9. 22:51Study

Memory Leak (메모리 누수)

위키백과에 Memory Leak을 검색해보면 메모리 누수현상은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상을 말합니다.

할당된 메모리를 사용한 다음 반환하지 않고 누적이 되기때문에 메모리가 누수가 발생합니다.

 

자바에서 메모리 누수는 더 이상 사용되지 않는 객체가 Garbage Collection에 의해서 회수되지 않고 계속 누적되는 현상입니다.

Old 영역에 누적된 객체로 인해서 Major Garbage Collection이 계속 발생하게 되고, 프로그램의 응답속도가 늦어지다가 결국 OOM(OutOfMemory) 오류가 발생되어 프로그램이 종료됩니다.

 

주로 빈번한 전역변수의 선언, 리스트, 해쉬맵 같은 콜렉션에 해당하는 객체를 해제하지 않고 계속 유지하다보면 발생하게됩니다.

 

자바 메모리 누수의 많은 원인을 정리해보면 아래와 같습니다.

- AutoBoxing 래퍼클래스의 무의미한 객체 생성

- Using Cache 캐쉬 데이터를 해제하지 않는 경우

- Closing Connections 스트림 객체를 사용하고 closing 하지 않는 경우

- Using CustomKey 맵의 키를 재정의 하지 않고 같은키로 데이터가 계속 쌓이는 경우

- Mutable Custom Key 맵의 키를 재정의 하였지만 키 값이 불변객체가 아니라 계속 변경될 경우

- Internal Data Structure 구현 오류로 인해 메모리 해제가 안될 경우

'Study' 카테고리의 다른 글

Multi Thread와 Multi Process란 무엇일까?  (0) 2020.09.03
오버헤드란 무엇일까?  (0) 2020.08.31
JVM(Java Virtual Machine)이란 무엇일까?  (0) 2020.08.03
Boiler plate란 무엇일까?  (0) 2020.05.07
IoC와 DI란 무엇일까?  (0) 2020.05.06