我应该如何清理内存中的TableView
实例
据我所知,
listeners
。 (它是否适用于相应表的列和行?)从外部参考我做了以下,
setSelectionModel
为null。setItems
为空ObservableArraylist
。 最后,我的代码如下所示。
//I gave a try for, RowFactory and ColumnFactory to null.
tableView.setRowFactory(null);
for (TableColumn column : this.tableView.getColumns()) {
column.setCellFactory(null);
column.setCellValueFactory(null);
}
tableView.getFocusModel().focus(null);
tableView.setOnMouseClicked(null);
tableView.setSelectionModel(null);
tableView.getColumns().clear();
tableView.setItems(FXCollections.observableArrayList());
tableView = null;
我的问题是:
我打开了多个表视图,当我关闭时,与HashMapNode
相关的(TableView
(从profiler获取)仍然在内存中而未被释放
因此,每当我关闭tableView时,我都会调用上面的代码。
另外,我使用内部类setCellFactory
,如下所示,
column.setCellFactory((TableColumn<?, ?> param) -> new EditingTableCell());
private class EditingTableCell extends TableCell<?, ?> {
//.....
}
那么,我应该如何正确清理TableView
实例,以便将其收集垃圾。
Java版:1.8.0_45
JavFX版本:8.0.45-b11
答案 0 :(得分:0)
3 (没有对表格实例的强引用)就足够了。
如果没有更强的引用,则监听器是弱引用,不会阻止GC清理对象。
但是,如果TableView包含在Tab中,则在关闭选项卡时可能不会进行GC,因为JavaFX在其内部保留了对最后一个关闭选项卡的强引用(我花了一些时间才发现它 - 我认为这是一种不受欢迎的类似bug的行为。)