为什么我的Java进程没有获得更多真实的内存?

时间:2012-11-02 04:36:10

标签: java memory io

我可能做了一些愚蠢的事,但我需要100 GB。我在启动时使用memory mapped files分配它们,它几乎立即发生。因为我只有32 GB的物理内存,所以我重新安排了程序,因此它可以使用20 GB的块,并且只有在做了大量的工作后才能切换到另一个。我正在Linux盒子上用-mx24G开始这个过程。

它发生的事情是它永远不会接近第一个块的末尾。 CPU大部分处于空闲状态,HD一直很忙。这个过程永远不会超过6 GB,这就解释了为什么它无法取得任何进展(局部性非常糟糕,几乎每次内存访问都是页面错误)。

但是为什么这个过程不会占用更多的真实记忆?仍然有15 GB免费,很多一些流程可以轻易交换掉。


文件在进程的最开始创建,因此为空。看起来这个过程确实不必要地获取空白页面。所以我预先进行了顺序扫描,现在我的流程很快就达到了20 GB。但这就是所有......

CPU仍处于空闲状态,就好像每个内存访问直写到磁盘一样。发生了什么事?

0 个答案:

没有答案