Linux 플랫폼에서 실행되는 JBoss 애플리케이션이 있는데 아래와 같은 최고 출력이 표시됩니다(실제로 정확한 데이터는 아님).
PID USER PR NI VIRT RES SHR S %CPU %MEM CODE DATA TIME+ COMMAND
1379 root 16 0 9.7g 1.6g 1980 S 0.7 1.3 36 9.7g 0:11.03 java
총 1.6g의 물리적 메모리와 9.7g의 DATA 부분을 가지고 있습니다. 실제로 힙 크기는 JVM으로 구성된 대로 ~128m입니다. 내 질문은 Java 응용 프로그램에 저장되는 DATA 부분이 무엇입니까? 어떤 단서라도 있나요? 어떻게 최적화할 수 있나요?
고마워, 엠레
답변1
DATA
brk(2)
즉, 데이터 세그먼트 확장을 사용하여 애플리케이션에 의해 할당된 메모리를 의미합니다 .
Java에는 데이터 세그먼트에 넣을 다양한 항목이 있습니다.
- 힙
- 네이티브 런타임 계층에서 할당된 모든 메모리(
native
키워드를 사용하는 코드) - JNI/JNA를 사용하여 Java에서 로드하는 DLL/공유 라이브러리에 의해 할당된 모든 메모리
- JIT(코드 캐시)에 의해 바이트 코드가 로드, 해석 및 컴파일되는 메모리
- GC 및 기타 런타임 지원 코드에서 사용되는 메모리 구조
- 스택
프로그램에 128MB 힙을 제공하면 Java가 일부 구조가 아닌 힙을 관리하기 위해 일부 구조를 생성하기 때문에 그보다 더 많이 할당됩니다. 따라서 128MB는 Java 개체를 할당할 수 있는 공간이 128MB라는 의미입니다.
답변2
이는 실행 코드 이외의 용도로 사용되는 물리적 메모리의 양으로, '데이터 상주 세트' 크기 또는 DRS라고도 합니다. 일반적으로 모든 열을 자세히 설명하는 매뉴얼 페이지를 참조할 수 있습니다. 매뉴얼 페이지를 얻으려면 를 입력하십시오 man top
.