首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java使用的堆与分配的对象大小

Java使用的堆与分配的对象大小
EN

Stack Overflow用户
提问于 2010-12-27 03:36:29
回答 2查看 1K关注 0票数 2

我有一个可能很愚蠢的问题。我目前正在测试CSP解算器choco和jacop。当我运行应用程序的性能分析(图形着色,大约3000个节点)时,我不能完全理解结果。

profiler声明的已用堆空间约为1 1GB内存。创建的所有对象的总和小于100MB。其他900MB的内存在哪里?

我认为方法调用(解算器可能使用大量回溯)被分配到堆栈上,所以这里不应该是问题所在。当我使用Xmx参数减少最大内存时,应用程序失败,并出现异常:

线程"main“java.lang.OutOfMemoryError中出现异常:超出GC开销限制

因此,看起来剩余的内存不是未使用的未收集的内存(因为在这种情况下,GC将释放它(并且不会失败))。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-27 05:13:20

Amir阿富汗人在他的评论中可能是正确的。Netbeans 6.9.1中的类(对象)可能以某种方式被过滤了(?或者分析器是假的?),因为当我从java visual VM执行堆转储并分析它时,它显示了!非常!不同的数字(总和与使用的堆相同)。

感谢您的回复。

票数 0
EN

Stack Overflow用户

发布于 2010-12-27 04:02:03

你能拿到堆的地图吗?它很可能是碎片化的,所以这100M的对象分散在整个内存空间中。所需的内存既是已分配对象的函数,也是它们被分配然后被解除引用的速度的函数。该错误意味着内存区域对于工作负载来说太小,垃圾收集器在管理它时消耗了大量CPU,并且超出了允许的阈值。

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

https://stackoverflow.com/questions/4535140

复制
相关文章

相似问题

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