gpt4 book ai didi

java - 有没有办法测量 Java 中的直接内存使用情况?

转载 作者:IT王子 更新时间:2023-10-28 23:37:38 28 4
gpt4 key购买 nike

如果我通过 ByteBuffer.allocateDirect() 创建缓冲区,则内存存在于 Java 堆之外。有没有一种方法可以跨平台测量我的应用程序的这种内存使用情况,类似于我可以使用 Runtime.totalMemory()Runtime.freeMemory( )?

最佳答案

您可以使用 MXBeans 来获取直接字节缓冲区和映射字节缓冲区使用的内存:

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();
}

打印类似:

direct
122
memory used 456.1562509536743 MB
total capacity456.15625 MB

mapped
0
memory used 0.0 MB
total capacity0.0 MB

toMB 函数在哪里:

private static String toMB(long init) {
return (Long.valueOf(init).doubleValue() / (1024 * 1024)) + " MB";
}

但是,我不能 100% 确定直接字节缓冲区是否是唯一可以存在于直接内存中的东西。或许还有其他的……

关于java - 有没有办法测量 Java 中的直接内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20058489/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com