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의 다양한 버전이나 가상 윈도우 툴킷, 스윙 패키지들의 버그도 메모리 누수를 일으킬 수 있다.
'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 |