Programing/Java

JAVA Memory leak check / fix

BeomJun.Kwon 2022. 3. 3. 09:53

 

JAVA Memory leak check / fix

 

 

 

Stack : 스택, 지역 변수들 (메소드나 생성자들에서 선언되는) 것들이 할당된다. 지역 변수들은 메소드가 시작될 때 할당되고, 메소드가 끝날 때 할당해제된다.

 

Heap : 힙, new 키워드를 통해서 만들어지는 모든 객체들이 할당된다. 지역변수는 primitive 자료형과 참조형 뿐 거의 없기 때문에, 어쩌다가 깊은 케이스나, 무한 재귀의 경우를 제외하면 스택은 잘 오버플로가 나지 않는다. JVM 은 힙에 살아있는 객체들이 가득 차고, 더 확장할 수 없다면 더 많은 객체를 할당 할 수 있다

 

 

자바 프로그램 메모리 누수의 전형적인 4가지 원인들은: 

Unknown or unwanted object references:

잘 모르고 있거나 원치않는 객체참조

이러한 객체들은 더이상 필요가 없지만 다른 객체가 여전히 참조 중이기 때문에, 가비지 컬렉터가 수거할 수 없다.

 

Long-living (static) objects:

오래 사는 static 객체들 이러한 객체들은 프로그램의 전체 생명주기동안 메모리에 머문다. 세션에 붙어있는 객체들은 아마 세션의 생명주기와 같을 것이고, 각각 유저마다 만들어져서 그 유저가 프로그램에서 로그아웃 할 때까지 유지될 것이다.

 

Failure to clean up or free native system resources: 

native system resource 들을 정리하는 것에 실패했을 때 Native system resources 는 자바 외부의 함수들에 의해 할당된 자원들인데, 일반적으로 C, C++ 로 쓰여져 있다. Java Native Interface (JNI) API 들이 Java code 로 native libraries/code 들을 넣기 위해서 사용된다.

 

Bugs in the JDK or third-party libraries:

JDK 나 3rd party libraries 의 버그들 JDK의 다양한 버전이나 가상 윈도우 툴킷, 스윙 패키지들의 버그도 메모리 누수를 일으킬 수 있다.

 

 

 

 

 

 

 

 

 

 

(참조) https://itdar.tistory.com/entry/%EC%9E%90%EB%B0%94-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%88%84%EC%88%98-%EC%B2%B4%ED%81%AC%ED%99%95%EC%9D%B8%EA%B3%A0%EC%B9%98%EB%8A%94-%EB%B0%A9%EB%B2%95-Memory-leak-checkfix-in-Java-application-cleanCode%EC%A2%8B%EC%9D%80%EC%BD%94%EB%93%9Coop%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5

 

 

 

 

 

 

 

 

 

 

 

 

 

'Programing > Java' 카테고리의 다른 글

(Class)XPath 사용법  (0) 2022.08.03
JVM 작동 원리  (0) 2022.07.08
Instanceof ( 연산자 )  (0) 2022.03.24
Jaskson  (0) 2022.03.23
JDBC / ODBC  (0) 2022.03.07