繁体   English   中英

如何使列表中的对象符合垃圾回收的条件?

[英]How to make object in List eligible for garbage collection?

我理解当一个对象被添加到List时,List会根据这个问题的答案保留对该对象的引用。 这个java对象是否有资格在List中进行垃圾回收

那么如何使List中的对象符合垃圾收集条件,以便从堆中删除它而不占用内存?

我问,因为在JavaFX中,Vboxs getChildren方法返回包含vbox的子节点的可观察列表。 如果删除了一个UI元素但不符合垃圾回收的条件,那么这个对象是否仍然在堆消耗内存上?

从中删除引用应该使它们成为垃圾收集的主题(只要没有其他对象保留引用!)。

你知道,这就是GC如何工作的全部想法:它保留那些活着的对象(可以从你的初始起点到达)。 其他一切都是垃圾; 一旦GC决定收集垃圾,可以处置。 而且要确切地说:你必须明白这是两个不同的活动。 对象X“变成垃圾”之间可能需要很长时间; 并且“X被收集;内存被释放”。

可以使用WeakReferences来避免这种情况; 但是,当然,这需要一些代码将最初将这样的WeakReference对象推送到列表中。 所以,如果你“拥有”这段代码,你可以改变它。 但当然:这意味着在访问WeakReference时,您始终必须检查WeakReference后面的对象是否仍然存在。

那么如何使List中的对象符合垃圾收集条件,以便从堆中删除它而不占用内存?

假设这些对象仅由此List引用,只需使用clear方法即可

如果删除了一个UI元素但不符合垃圾回收的条件,那么这个对象是否仍然在堆消耗内存上?

只要一个对象被至少另一个本身不符合垃圾收集条件的对象硬引用,objet本身就不符合垃圾收集的条件,因此它不会被GC收集,它将保留在堆。

如果您无法从List中删除该对象,我可以考虑处理此问题的唯一方法是将对象包装到WeakReference

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM