一、使用ByteBuffer.allocateDirect分配的off heap内存大小
本机进程
在Jvisualvm中安装 Mbeans插件,然后查看java.nio/BufferPool/direct
进程内使用代码获取
MBeanServer mbs = ManagementFactory. getPlatformMBeanServer() ;
ObjectName objectName = new ObjectName("java.nio:type=BufferPool,name=direct" ) ;
MBeanInfo info = mbs.getMBeanInfo(objectName) ;
for(MBeanAttributeInfo i : info.getAttributes()) {
System.out .println(i.getName() + ":" + mbs.getAttribute(objectName , i.getName()));
}
远程进程
- JMX获取
如果目标机器没有启动JMX,那么添加jvm参数:

本文探讨了Java中使用ByteBuffer.allocateDirect进行堆外内存(off heap)的分配,包括如何在本地和远程进程中查看此类内存的大小。通过JVisualVM的MBeans插件和JMX进行监控。此外,还提及了利用Unsafe反射调用直接申请堆外内存的情况,但这种内存通常无法通过Java直接获取,可能需要借助如gperftools等外部工具进行分析。
最低0.47元/天 解锁文章
844

被折叠的 条评论
为什么被折叠?



