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

标签 java javafx collections garbage-collection observablelist

我知道当一个对象被添加到列表中时,列表会根据这个问题的答案保留对该对象的引用 Is this java Object eligible for garbage collection in List

那么如何使List中的对象符合垃圾回收条件,使其从堆中移除而不占用内存?

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

最佳答案

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

您知道,这就是 GC 工作原理的全部思想:它保留那些存活的对象(可以从您的初始起点到达)。其他一切都是垃圾;并在 GC 决定收集该垃圾后进行处置。在此准确地说:您必须了解这是两种不同的 Activity 。对象 X“变成垃圾”之间可能需要很长时间;和“X 被收集;内存被释放”。

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

关于java - 如何使列表中的对象符合垃圾收集条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38765109/

相关文章:

java - 从外部类处理 JFrame 组件的最佳方法

java - Spring Data 在插入时丢失一些条目

java - 从子进程登录时,Logback 导致线程卡住

Java 使用 JPA 2.1 和 @ManyToOne 上的 hibernate 部分加载实体

java - 将数据动态添加到 LineChart JavaFX

JavaFX 在 ImageView 中显示像素的 RGB 值

java - 是否可以在 JavaFX 中创建 Controller 数组?

java - 如何动态地将多个值添加到HashMap中的单个键上?

laravel - Eloquent 集合方法,例如 only 或 except 返回一个空集合

c# - 递归获取对象的属性和子属性