关于消除堆空间问题的研究?

时间:2010-07-28 07:45:10

标签: java memory memory-management jvm jvm-crash

我们正在组建一个可以加载任何jar文件并运行统计模型的平台。我现在面临的问题是,有些模型运行得太大而无法适应我们的平台,导致堆内存错误。我知道已经对此进行了研究,但我不能再找到它们了。从本质上讲,谷歌应用程序引擎如何做到这一点?有人听说过任何基于磁盘的堆空间吗?

4 个答案:

答案 0 :(得分:1)

基于磁盘的堆空间很简单 - 它通常称为虚拟内存,将数据从磁盘移动到meory和back的过程称为交换。任何在过去30年中设计的操作系统都可以做到。它不仅适用于堆,也适用于堆栈,程序内存本身等。虽然相当慢,但现代内存价格通常是不必要的。

答案 1 :(得分:1)

我认为您已经尽可能地扩展了堆(考虑到物理内存,处理器架构,JVM和操作系统的限制)。

此外,答案是没有我知道的JVM实现基于磁盘的堆空间。然而,这并不是一个完全荒谬的想法。曾经有一个学术界(大多数)致力于解决“正交持久性”问题,其中对象在内存和持久性存储之间透明地迁移。不幸的是,有一些基本问题使得这项技术变得困难。 (例如,垃圾收集持久存储,使用多线程应用程序获得逻辑上一致的检查点,以及处理代码更改。)无论如何,结果是研究领域变得安静。

答案 2 :(得分:0)

您可以使用命令行开关来增加堆空间(通常最多2GB)。

如果这还不够,那么您需要仔细调整应用内存使用情况,这需要有关其设计的更多信息。

答案 3 :(得分:0)

您可以使用这些参数指定堆大小

java -Xms1024m -Xmx2048m

第一个是初始大小,第二个是最大大小。如果没有RAM支持此堆大小,则操作系统将自动执行分页/交换以适应此内存大小。当然,这显然会更慢。