JavaFX:从Memory清理TableView实例
我应该如何从内存中清理TableView实例,
从我学到的, >删除附加到表的所有侦听器. (它是否适用于相应表的列和行?) 从外部参考我做了以下, >将焦点模型设置为null. 最后,我的代码如下所示. //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; 我的问题是: 我打开了多个表视图,当我关闭时,(与ProfileView相关的HashMapNode(来自探查器)仍在内存中而未发布) 另外,我使用内部类来设置如下的setCellFactory, column.setCellFactory((TableColumn<?,?> param) -> new EditingTableCell()); private class EditingTableCell extends TableCell<?,?> { //..... } 那么,我应该如何正确地清理一个TableView实例,以便它被垃圾收集.
解决方法
3(没有对表实例的强引用)应该足够了.
如果没有更强的引用,则监听器是弱引用,不会阻止GC清理对象. 但是,如果TableView包含在Tab中,那么在关闭选项卡时它可能不是GC,因为JavaFX在其内部保留了对最后一个关闭选项卡的强引用(我花了一些时间才发现 – 我考虑这是一种不受欢迎的类似bug的行为). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |