如何查看NIO缓冲区的内存使用情况?

3

有没有一种方法可以查看NIO缓冲区的内存使用情况?在JConsole中有非堆内存部分,但我认为这不包括NIO缓冲区?

如果操作系统是Linux(Ubuntu或CentOS),那么是否会有所影响?

祝好,

Wim

3个回答

4
值得注意的是,直接内存缓冲区只使用您使用的物理内存(通常是4K的下一个页面大小)。创建时它们使用虚拟内存,但操作系统足够智能,不会分配物理内存页(驻留),直到您使用直接内存缓冲区中的页面。这意味着使用的物理内存大小可能小于您分配的内存量(虚拟内存)。您应该关心的是物理/驻留内存。
这样做的好处是,即使您只希望使用几KB,也可以分配几MB缓冲区,并且它只使用您使用的数量。如果出现某些原因需要更多,您的程序也不会崩溃。即您不必正确获取大小,可以相对安全地高估分配的大小。

1

0

我用它来监控虚拟内存、常驻内存和本地线程的数量:

for((i=0;;++i)) { echo $i ` grep VmSize /proc/\21009/status | grep -o '[0-9]*'` ` grep VmRSS /proc/\21009/status | grep -o '[0-9]*'` ` grep Threads /proc/\21009/status | grep -o '[0-9]*'` ; sleep 1 || break; } > data

它创建了一个以空格分隔的文件,您可以轻松地将其导入到您喜爱的电子表格工具中。

当然,您需要将21009替换为您想要监视的Java进程的进程ID。

尽管这个小脚本已经证明对我有用,让我看到我正在调查的程序中没有内存泄漏,但它并没有完全回答我的问题,因为我想能够查看仅由NIO分配的内容,而不是JVM使用的所有内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接