如果通过创建缓冲区ByteBuffer.allocateDirect(),则该内存将位于Java堆之外。有没有一种方法可以以跨平台的方式测量应用程序中此类内存的使用情况,类似于我可以使用Runtime.totalMemory()and 来测量Java堆使用情况的方法Runtime.freeMemory()?
ByteBuffer.allocateDirect()
Runtime.totalMemory()
Runtime.freeMemory()
您可以使用反射来获取Bits.reservedMemoryJava 7的OpenJDK / HotSpot。没有独立于平台的方式,它仅通过ByteBuffer.allocateDirect()向您显示用法,而没有其他分配本地内存的方式。
Bits.reservedMemory
另一种方法是解析/proc/{pid}/maps和排除文件映射。这是您的进程正在使用的虚拟内存的近似值。
/proc/{pid}/maps