在 Linux 上,Java 应用程序的 top 命令输出中的 DATA 是什么?

在 Linux 上,Java 应用程序的 top 命令输出中的 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 数据部分。实际上,使用 JVM 配置的堆大小约为 128m。我的问题是 Java 应用程序的数据部分存储了什么?有什么线索吗?我该如何优化它?

谢谢,埃姆雷

答案1

DATA表示应用程序分配的内存使用brk(2)-即扩展数据段。

Java 会将很多不同的东西放入数据段:

  • 本机运行时层分配的任何内存(使用native关键字的代码)
  • 使用 JNI/JNA 从 Java 加载的 DLL/共享库分配的任何内存
  • JIT(代码缓存)加载、解释和编译字节码的内存
  • GC 和其他运行时支持代码使用的内存结构
  • 堆栈

请注意,为程序分配 128MB 的堆将分配更多空间,因为 Java 还会创建一些不属于堆的结构来管理堆。因此 128MB 意味着您将有 128MB 的空间可用于分配 Java 对象。

答案2

这是用于执行除可执行代码以外的其他操作的物理内存量,也称为“数据驻留集”大小或 DRS。通常,您可以参考详细描述所有列的手册页。要获取手册页,请键入man top

相关内容