[개발지식] JAVA 메모리 릭

Hyo Kyun Lee·2024년 9월 30일
0

개발지식

목록 보기
45/60

1. 개요

  • 다건 처리 시 매개변수 전달을 위한 DTO 객체 생성 시 단순 값 복사 / 내부적으로 또 다른 신규(중복) 객체 생성하는 방법을 유의해야 한다.
  • 자바가 메모리 누수를 방지하기 위한 gc가 있긴 하지만, 이것도 gc 상황을 만족하지 않는다면 의미가 없으므로 반드시 고려하면서 로직을 구성해야 한다.

2. 메모리 누수(memory leak)

  • 대용량 다건 처리 시, for문안에 새로운 객체를 끊임없이 생성할 경우 해당 객체를 가르키는 참조변수가 지속 유지되어 객체가 gc에 의해 사라지지 않고 그대로 누적되어 생성이 된다. mapper를 통해 변수들이 복사되지 않고 객체들이 계속 생성되어 이후 더이상 해당 객체에 접근이 안되며 사용하지 않은 채로 그대로 메모리에 쌓이는 메모리 릭 현상이 발생한다.

  • 클래스를 로더하는 클래스로더는 메타스페이스에 할당하는데, 이 할당 영역이 부족하게 되면 메모리를 정리하는 gc를 동작한다. 메모리 릭은 이 메타스페이스가 가득 들어찼을 경우에 발생하므로, meta full이라고도 한다.

  • 특히 본래 메타스페이스는 heap 내부에 있어서 수동적인 지시 및 반환이 가능하였으나, java 8 이후부터는 native memory안에 위치하여 호스트 운영체제의 성능에 직접적인 영향을 준다.

3. 참조자료

0개의 댓글