3
我應該如何從內存清理TableView
實例清理的TableView例如,JavaFX的:從內存
從我瞭解到,
- 拆下連接到表中的所有
listeners
。 (是否適用於相應的表格行和列?) - 清除所有列。 和
- 沒有強引用表的實例。
從外部基準我做了以下,
- 組焦點模型爲空。
- 將鼠標,鍵監聽器設置爲null。
setSelectionModel
爲空。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
仍然在內存中並不會公佈) 所以每當我關閉一個tableView我稱之爲上面的代碼。
還有,我用內部類setCellFactory
像下面,
column.setCellFactory((TableColumn<?, ?> param) -> new EditingTableCell());
private class EditingTableCell extends TableCell<?, ?> {
//.....
}
所以,我應該怎麼正確清理TableView
實例,這樣它會被垃圾收集。
Java版本:1.8.0_45
JavFX版本:8.0.45-B11
從你的問題不清楚,但 - 你實際上是否從場景圖中刪除它? 另外 - 這實際上是一個問題?即使當一個對象不再被引用時,只要有足夠的可用空間,GC不會保證是否和何時GC決定收集它,因此GC可能不會打擾收集它。 – Itai
@sillyfly準確地說,問題是要在TableView實例上完成哪些步驟,以便它可以被GC化(在某些時候)。就像你說的那樣從場景圖中刪除它。是的,我從場景圖中刪除它。我瞭解它到什麼時候收集它,但即使沒有足夠的可用空間可用時,也不會收集它,我很確定它駐留在內存中。 – user3164187
刪除附加到表的列表是正確的。但是將'setonmouseclicked'設置爲空不是刪除列表器的正確方法。確認你真的刪除了添加了addListner或綁定的列表 – user43968