为什么Matlab不使用Swap但错误"Out of memory"?

Hav*_*veF 4 matlab out-of-memory

我想知道为什么Matlab不使用swap,而是抛出错误"Out of memory"?

Matlab不应该放慢速度而不是抛出"内存不足"吗?

这与Java有关吗?

补充说:

我知道"内存不足"意味着它没有连续的记忆.不交换有连续的内存,还是?我糊涂了...

ang*_*nor 6

它与MATLAB无关.当您尝试分配比硬件中存在的内存更多的内存时,会发生什么操作是特定于操作系统

在Linux上,默认情况下,操作系统将"乐观地"分配几乎任何你想要的东西,即交换空间也算作可分配内存.你会得到你想要的 - 没有OOM错误,但交换分配数据的计算速度慢.这个"功能"被称为overcommit.您可以通过修改Linux中的过度使用设置来更改此行为(请查看此处的简要摘要).

使用它来解决MATLAB中的大问题可能不是最好的想法,因为整个操作系统开始工作的速度非常慢.它绝对不能与有意识地在计算中使用硬盘的优化的"核外"实现进行比较.

这就是它在Linux上的表现.我不知道如何更改Windows上的内存分配行为,但我怀疑你真的想这样做.你需要更多的RAM.

你确实混淆了东西 - 交换与连续的记忆无关.由OS分配的内存是"虚拟内存",无论底层物理内存是否可以映射到连续页面,它都是连续的.

编辑对于使用磁盘空间作为额外内存的大型基质上的透明"核外"操作,您可能希望查看VVAR fileexchange项目.这个类假装是一个通常的MATLAB类,但它在底层的HDD文件上运行.请注意,MATLAB 通常的数组大小限制仍然适用.