You can use MXBeans to get the memory used by direct byte buffers and mapped byte buffers:
List<BufferPoolMXBean> pools = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class); for (BufferPoolMXBean pool : pools) { System.out.println(pool.getName()); System.out.println(pool.getCount()); System.out.println("memory used " + toMB(pool.getMemoryUsed())); System.out.println("total capacity" + toMB(pool.getTotalCapacity())); System.out.println(); }
prints something like:
direct 122 memory used 456.1562509536743 MB total capacity456.15625 MB mapped 0 memory used 0.0 MB total capacity0.0 MB
where is the toMB function:
private static String toMB(long init) { return (Long.valueOf(init).doubleValue() / (1024 * 1024)) + " MB"; }
However, I'm not 100% sure if direct byte buffers are the only things that can live in direct memory. Perhaps there are other things ...
source share