查看Java可用的直接缓冲区内存量?

Gil*_*ili 4 java nio

如何查看Java当前分配(并可能分配)多少直接内存?作为http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4879883的评估者提及,Java将这些缓冲区维护在普通Java堆之外.

ksc*_*eid 5

使用本机代码(或分析等)可能还有其他方法可以做到这一点,但这样的事情可能适用于Java:

Class c = java.nio.Bits.class;
Field maxMemory = c.getDeclaredField("maxMemory");
maxMemory.setAccessible(true);
Field reservedMemory = c.getDeclaredField("reservedMemory");
reservedMemory.setAccessible(true);
synchronized (c) {
    Long maxMemoryValue = (Long)maxMemory.get(null);
    Long reservedMemoryValue = (Long)reservedMemory.get(null);
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我宁愿这样做来获取类实例:`javaNioBitsClass = Class.forName("java.nio.Bits");`因为这个类默认是受包保护的. (2认同)