我们正在构建一个可以加载任何 jar 文件并运行统计模型的平台。我现在面临的问题是某些模型运行太大而无法适应我们的平台,从而导致堆内存不足错误。我知道已经对此进行了研究,但我再也找不到它们了。本质上,谷歌应用引擎是如何做到这一点的?有人听说过任何基于磁盘的堆空间吗?
问问题
146 次
4 回答
1
我假设您已经尽可能地扩展了堆(考虑到物理内存、处理器架构、JVM 和操作系统的限制)。
除此之外,答案是我所知道的没有 JVM 实现基于磁盘的堆空间。然而,这并不是一个完全荒谬的想法。曾经有一个学者社区(主要是)研究“正交持久性”问题,其中对象在内存和持久性存储之间透明地迁移。不幸的是,有一些基本问题使这项技术……很难。(例如,垃圾收集持久性存储,使用多线程应用程序获得逻辑一致的检查点,以及处理代码更改。)无论如何,结果是该研究领域已经安静下来。
于 2010-07-28T08:27:13.803 回答
1
基于磁盘的堆空间是微不足道的 - 它通常称为虚拟内存,将数据从磁盘移动到内存并返回的过程称为交换。过去 3 年设计的任何操作系统都可以做到。它不仅适用于堆,还适用于堆栈、程序内存本身等。虽然它很慢,而且现代内存价格通常是不必要的。
于 2010-07-28T07:52:33.053 回答
0
您可以使用命令行开关来增加堆空间(通常最多 2GB)。
如果这还不够,那么您需要仔细调整应用程序的内存使用情况,这需要有关其设计的更多信息。
于 2010-07-28T07:47:56.573 回答
0
您可以使用这些参数来指定堆大小
java -Xms1024m -Xmx2048m
第一个是初始大小,第二个是最大大小。如果没有 RAM 支持此堆大小,则操作系统将自动进行分页/交换以适应此内存大小。当然,这显然会更慢。
于 2010-07-28T07:56:22.810 回答