我想知道为什么Matlab不使用swap,而是抛出错误“Out of memory”?
Matlab不应该放慢速度而不是抛出“内存不足”吗?
这与Java有关吗?
加入:
我知道“内存不足”意味着它不在连续的内存中。不交换有连续的内存,还是?我很困惑......
答案 0 :(得分:6)
这不是关于MATLAB的。当您尝试分配比硬件中存在的内存更多的内存时,会发生什么操作是特定于操作系统
在Linux上,默认情况下,操作系统将“乐观地”分配几乎任何你想要的东西,即交换空间也算作可分配内存。你会得到你想要的 - 没有OOM错误,但交换分配数据的计算速度慢。这个“功能”被称为overcommit。您可以通过修改Linux中的过度使用设置来更改此行为(例如,请查看here以获取简要摘要)。
使用它来解决MATLAB中的大问题可能不是最好的想法,因为整个操作系统开始工作的速度非常慢。它绝对不能与有意识地在计算中使用硬盘的优化的“核外”实现进行比较。
这就是它在Linux上的表现。我不知道如何更改Windows上的内存分配行为,但我怀疑你真的想这样做。你需要更多的RAM。
而且你确实混淆了事情 - 交换与连续的记忆无关。操作系统分配的内存是“虚拟内存”,无论底层物理内存是否可以映射到连续页面,它都是连续的。
编辑对于使用磁盘空间作为额外内存的大型基质上的透明“核外”操作,您可能希望查看VVAR fileexchange project。这个类假装是一个通常的MATLAB类,但它在底层的HDD文件上运行。请注意,通常array size limitations的MATLAB仍然适用。