是否FileChannel#map
立即分配生成的 ByteBuffer
所需的所有内存,还是仅在从缓冲区读取期间按需分配?
我刚刚尝试在一个简单的测试程序中映射一个 500+ MB 的文件,并查看该进程的内存使用情况。 (同时使用 Runtime#totalMemory
并在 OS X Activity 监视器中观察它以获取 groovysh 进程。)内存使用量从未超过 30 MB。
那么,Java 实现是否可以在 native 调用中“隐藏”它的一些内存使用情况?如果是这样,有没有办法找出在 OS X 上有多少?
最佳答案
内存使用从来都不是直截了当的。 FileChannel.map
使用的实际缓冲区不是 Java 堆的一部分。事实上,内存可能与其他进程共享。在触摸页面之前,甚至可能无法从光盘中读取文件。
关于java - FileChannel#map 的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/839230/