内存不足错误 - 为什么不分页?

时间:2014-07-18 14:29:54

标签: java out-of-memory paging

java程序中经常发生内存不足错误。我的问题很简单:当超出内存限制时,为什么java直接杀死程序而不是将其交换到磁盘?我认为内存分页/交换策略经常在现代操作系统中使用,而像c ++这样的编程语言肯定支持交换。感谢。

3 个答案:

答案 0 :(得分:2)

@Pimgd正在按计划进行:但@Kayaman是对的。除了从系统请求外,Java不处理内存。 C ++不支持交换,它从操作系统请求内存,操作系统将进行交换。如果您使用-Xmx为您的应用程序请求足够的内存,它可能会开始交换,因为操作系统认为它可以。

答案 1 :(得分:1)

因为Java是跨平台的。可能没有磁盘。

其他原因可能是这样的事情会影响性能,开发人员不希望这种情况发生(因为Java已经带来了性能开销?)。

答案 2 :(得分:0)

关于分页的几句话。使用分页的虚拟内存 - 存储在系统上运行的任何程序的4K(或类似)块 - 是操作系统可以或不可以做的事情。地址空间的承诺仅受用于存储地址的机器字的容量限制,听起来很棒,但是存在严重的缺点,称为thrashing。当页面(重新)加载的数量超过某个频率时会发生这种情况,这反过来是由于过多的进程请求过多的内存以及这些进程的非本地存储器访问。 (如果一个进程只能访问一小部分页面就可以执行很长的代码,那么它就具有良好的局部性。)

分页还需要(快速)二级存储。

限制程序内存资源的能力(如在Java中)不仅是一种负担;当需要为服务器系统设计一些资源使用总体计划时,它也必须被视为一种祝福。