Linux에서 Java 애플리케이션의 최상위 명령 출력에 있는 DATA는 무엇입니까?

Linux에서 Java 애플리케이션의 최상위 명령 출력에 있는 DATA는 무엇입니까?

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

DATAbrk(2)즉, 데이터 세그먼트 확장을 사용하여 애플리케이션에 의해 할당된 메모리를 의미합니다 .

Java에는 데이터 세그먼트에 넣을 다양한 항목이 있습니다.

  • 네이티브 런타임 계층에서 할당된 모든 메모리( native키워드를 사용하는 코드)
  • JNI/JNA를 사용하여 Java에서 로드하는 DLL/공유 라이브러리에 의해 할당된 모든 메모리
  • JIT(코드 캐시)에 의해 바이트 코드가 로드, 해석 및 컴파일되는 메모리
  • GC 및 기타 런타임 지원 코드에서 사용되는 메모리 구조
  • 스택

프로그램에 128MB 힙을 제공하면 Java가 일부 구조가 아닌 힙을 관리하기 위해 일부 구조를 생성하기 때문에 그보다 더 많이 할당됩니다. 따라서 128MB는 Java 개체를 할당할 수 있는 공간이 128MB라는 의미입니다.

답변2

이는 실행 코드 이외의 용도로 사용되는 물리적 메모리의 양으로, '데이터 상주 세트' 크기 또는 DRS라고도 합니다. 일반적으로 모든 열을 자세히 설명하는 매뉴얼 페이지를 참조할 수 있습니다. 매뉴얼 페이지를 얻으려면 를 입력하십시오 man top.

관련 정보