首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将堆大小增加到6 6GB

将堆大小增加到6 6GB
EN

Stack Overflow用户
提问于 2014-03-27 16:21:09
回答 2查看 5.3K关注 0票数 0

我看了下面这篇文章:Increase heap size in Java

现在,我有一个需要大约5 5GB内存的程序,在执行本文中所述的操作时(即通过在参数字段中使用-Xmx5g来增加堆大小),我仍然可以

代码语言:javascript
复制
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

我的系统是Windows 7 (64位),内存为8 8GB。我做错了什么吗?如果是,我应该如何获得5 5GB的堆内存,或者我的系统根本无法处理?

注意:我必须使用一个大小为25K*25K且所有非零值的2D矩阵进行计算。因此,我也不能使用稀疏矩阵。

EN

回答 2

Stack Overflow用户

发布于 2014-03-27 16:29:37

当JVM没有足够的内存来分配对象时,就会抛出OutOfMemoryError。如果你定义了5G堆,这几乎肯定意味着你有一种内存泄漏。例如,我可以编写在任何环境下都会导致OutOfMemoryError的非常简单的代码:

代码语言:javascript
复制
List<String> list = new LinkedList<>();
while(true) {
    list.add("a");
}

运行此代码并等待几秒钟。OutOfMemoryError将被抛出。这是因为我将字符串添加到列表中,而从不清理它。

我相信你的应用程序也会发生类似的事情。

我明白,它不像我的例子那么简单,所以你可能不得不使用profiler来调试它,并了解内存泄漏的原因。

编辑:我刚刚看到你正在使用25K*25K矩阵。这意味着你有625M个细胞。您没有提到矩阵的类型,但如果它是占用4字节的int,则需要625*4=2500M=2.5G内存,因此5G应该足够了。

请试着分析你的程序中还发生了什么,以及你的内存被花在了哪里。

票数 2
EN

Stack Overflow用户

发布于 2014-03-27 16:36:38

5G/(25K*25K) ~8字节。

宽宏大量地假设你的程序除了那个矩阵不使用内存,每个矩阵元素不能超过8个字节。

您应该至少计算近似的内存需求,以检查是否有可能在您的硬件上处理这种大小的问题。例如,如果您需要一个MxN大小为double值的2D数组,那么您至少需要8*M*N字节的内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22681831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档