从java堆中收集旧对象

时间:2016-03-08 20:07:56

标签: java garbage-collection native-code eclipse-memory-analyzer

我有Order_Item类实例,这些是GC Roots的路径(不包括幻像/弱/软引用): enter image description here

我几乎没有问题:
1)我不确定Order_Item是否会被垃圾收集 我试图运行System.gc(),对象仍然在堆中 根据提供的图像,是否允许收集?

2)什么是“原生堆栈”是什么意思? 据我所知,它被视为GC根。 http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fconcepts%2Fgcroots.html 为什么有些对象(即Order 0x782032cf8)保存在“Native Stack”中?

3)如果我从GC Root引用到对象A,那么该对象不会被垃圾回收?对吗?
如果是这样,我的Order_Item对象不能被垃圾收集?

4)如果3是正确的,我如何找到保留对象0x7821da5e0和0x782032cf8的内容,以及如何取消引用/删除它们?

1 个答案:

答案 0 :(得分:0)

您无法真正强制垃圾收集器删除给定对象。您知道只要可以通过程序中给定点的引用访问该对象,该对象就会保持活动状态。但是如果对象变得“可收集”,它很快就会被收集,但是如果内存没有压力,它可能会长时间徘徊。

通常,如果有足够的内存,没有理由真正删除对象。我所知道的唯一例外是密码。在这里,你使用一个char数组,并在你使用它时用无意义覆盖它。

对于本机堆栈:您的链接指示本机堆栈保留外部资源,例如:文件。