프로그래밍에서 메모리 누수현상(Memory Leak)은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다.
자바의 메모리 누수
자바에서 메모리 누수는 더이상 사용하지 않는 객체가 가비지 컬렉션(GC)에 의해서 회수되지 않고 계속 누적되는 현상입니다. Old 영역에 누적된 객체로 인해서 메이저 GC가 빈번하게 발생하게 되고, 프로그램의 응답속도가 늦어지다 결국 OOM(OutOfMemory) 오류로 프로그램이 종료됩니다.
주로 빈번한 전역변수의 선언이나, 리스트나 해쉬맵 같은 콜렉션에 저장한 객체를 해제하지 않고 계속 유지하게 되면서 주로 발생합니다.
다음의 dzone 기사를 보면 Java 에서 메모리릭이 일어는 경우를 5가지 예를 들어서 코드와 함께 설명하고 있습니다.
https://dzone.com/articles/memory-leak-andjava-code
자바의 메모리 누수 예제
- Integer, Long 같은 래퍼 클래스(Wrapper)를 이용하여, 무의미한 객체를 생성하는 경우
- 맵에 캐쉬 데이터를 선언하고 해제하지 않는 경우
- 스트림 객체를 사용하고 닫지 않는 경우
- 맵의 키를 사용자 객체로 정의하면서 equals(), hashcode()를 재정의 하지 않아서 같은 키로 착각하여 데이터가 계속 쌓이게 되는 경우
- 맵의 키를 사용자 객체로 정의하면서 equals(), hashcode()를 재정의 하였지만, 키값이 불변(Immutable) 데이터가 아니라서 데이터 비교시 계속 변하게 되는 경우
- 자료구조를 생성하여 사용하면서, 구현 오류로 인해 메모리를 해제하지 않는 경우
반응형
'개념' 카테고리의 다른 글
[개념] 한글 문자 인코딩 (0) | 2019.09.17 |
---|---|
[개념] NoSQL (0) | 2019.08.08 |
[개념] 오브젝트 스토리지(Object Storage) (0) | 2019.05.08 |
[개념] 프로그래밍에서 보일러플레이트(boilerplate)의 뜻 (0) | 2019.02.27 |
[개념] HTTPS SNI 필드 차단 (0) | 2019.02.15 |