1

我有 Order_Item 类实例,这些是 GC Roots 的路径(不包括幻像/弱/软引用): 在此处输入图像描述

我有几个问题:
1)我不确定 Order_Item 是否会被垃圾收集。
我尝试运行 System.gc(),但对象仍然在堆中。
可以根据提供的图片收集吗?

2)“本机堆栈”是什么意思?据我了解,它被视为GC root。 http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fconcepts%2Fgcroots.html 为什么某些对象(即订单 0x782032cf8)保留在“本机堆栈”中?

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

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

4

1 回答 1

0

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

通常,如果有足够的内存,就没有理由真正删除对象。我知道的唯一例外是密码。在这里,您使用 char 数组并在使用后用废话覆盖它。

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

于 2016-03-08T20:14:32.473 回答