我正在尝试用实际方法测量我的应用程序内存占用量。 我正在使用java.lang.management类来计算这个
val heap = ManagementFactory.getMemoryMXBean.getHeapMemoryUsage
val nonHeap = ManagementFactory.getMemoryMXBean.getNonHeapMemoryUsage
val total = heap + nonHeap + (?)
我假设两者的总和将给出应用程序使用的内存总量,但实际情况并非如此,top命令提供的实际大小更大。
所以我想知道我错过了什么?除了获取应用程序的总内存使用量之外,我还需要添加到此等式中。
答案 0 :(得分:10)
要查找top
提供的内存使用情况,请检查该进程的操作系统级统计信息。
在Linux上,您可以通过阅读/proc/self/stat
或/proc/self/status
来执行此操作。
有关proc
pseudo-file system的更多信息。
请注意,应用程序足迹是一个不同的概念。从JVM的角度来看 Java应用程序占用空间大致是Java对象占用的空间量(Heap) 和Java类(非堆)。从操作系统的角度来看,还有很多东西可以计算, 包括JVM本身和使您的应用程序工作的Java Runtime的所有组件。
整个Java进程使用的内存包括