java - FileChannel#map 的内存使用

标签 java memory-management mmap

是否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/

相关文章:

java - 使用来自另一个 ArrayList 中的字符串命名 ArrayList

java - 错误: cannot find symbol class FirebaseInstanceIdService

python - mmap 多个文件 block 和缓存 mmap 对象 (Python)

java - 无法在 mac os x 上分配内存错误 - java(xx,xx) malloc : *** mmap(size=XX) failed (error code=12)

c - 共享内存段被删除?

java - 递归中的continue关键字

JavaFX : how to handle dragging an item from a TreeView

iphone - 清除 UITextField 的最佳方法

c# - 在C#中分配一 block 内存?

c++ - C++中正确使用memset和memcpy初始化字符数组