heap dump를 분석하다 보면 항상 일정량 이상의 java/lang/object가 heap memory를 사용하고 있는 것을 확인할 수 있다.
이 java/lang/object에 대한 설명은 다음과 같다.
java/lang/object => Java의 모든 클래스의 기본이 되는 클래스. 클래스 계층에서 가장 상위에 존재한다. 모든 클래스는 이 Object 클래스를 상속받아 구성되며, 그렇기에 따로 import 선언을 하지 않아도 사용이 가능하다. (참조 : http://www.incodom.kr/Java/java.lang.Object) |
위 java/lang/object에는 11개의 메서드가 존재하며 예시는 다음과 같다.
- clone() : 객체 자신의 복제본 반환
- equals() : 객체 자신과 obj가 같은 객체인지 boolean 반환
- toString() : 16진수로 변환 후 반환
- notify(), notifyAll() : 객체를 사용하고자 대기중인 Thread를 하나 또는 모두 재개
- finalize() : 이 객체에 대한 참조가 더 이상 없다고 판단될 때 GC에 의해 자동으로 호출되는 메서드
- getClass() : Class 인스턴스 반환
- hashCode() : 객체 자신의 해시코드 반환
- wait() : Thread를 지정된 시간동안 기다리게 함
(참조 : https://noritersand.github.io/java/java-lang-object/)
위와 같은 설명으로 미루어 짐작하건데, heap dump 분석 시 나타나는 java/lang/object 에 대한 heap memory 점유율은 JAVA를 사용하는 application에서 사용하고자 하는 일정 량의 저장공간으로 생각된다.
만약 특정한 클래스에서 메모리 과점유를 하고 있다면, 이에 대한 분석이 필요해 보이지만, 단순하게 java/lang/object 라는 클래스로 인한 과점유에 대해서는 위 상황을 우선적으로 참고해야 하지 않을까 싶다.
'JAVA > JAVA' 카테고리의 다른 글
Java Native Memory Tracking (jcmd 사용) (0) | 2023.02.01 |
---|---|
HashMap (0) | 2022.12.26 |
JVM memory 모니터링 (1) | 2022.09.23 |
JMX (0) | 2022.06.14 |
request.getHeader의 ip 얻기 (0) | 2022.06.02 |