Comment dois-je nettoyer une instance TableView
de la mémoire,JavaFX: Nettoyer une instance TableView de la mémoire
D'après ce que j'ai appris,
- Retirez tous
listeners
fixé à la table. (s'applique-t-il même aux colonnes et aux lignes de la table correspondante?) - Effacer toutes les colonnes. et
- Aucune référence forte à l'instance de table.
D'une référence externe je l'ai fait ce qui suit,
- ensemble modèle de mise au point sur null.
- Définir la souris, écouteurs de clé à null.
setSelectionModel
à null.setItems
àObservableArraylist
vide.
Enfin, Mon code ressemble à quelque chose comme ci-dessous.
//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;
Mon problème est:
J'ai plusieurs vues de table ouvert et quand je ferme, (HashMapNode
(obtenu de profileur) liée à TableView
est toujours en mémoire et non libéré) Donc, chaque fois que je fermer un tableauVoir j'appelle le code ci-dessus.
Aussi, j'utiliser les classes internes à setCellFactory
comme ci-dessous,
column.setCellFactory((TableColumn<?, ?> param) -> new EditingTableCell());
private class EditingTableCell extends TableCell<?, ?> {
//.....
}
Alors, comment dois-je nettoyer correctement une instance TableView
afin qu'il sera nettoyé.
Java Version: 1.8.0_45
JavFX Version: 8.0.45-b11
Ce n'est pas clair à partir de votre question, mais - le retirez-vous réellement du graphe de scène? Aussi - est-ce réellement un problème?Même lorsqu'un objet n'est plus référencé, il n'y a aucune garantie si et quand le GC décidera de le collectionner, tant qu'il y a suffisamment d'espace libre, il est donc possible que le GC ne prenne pas la peine de le collectionner. – Itai
@sillyfly Pour être précis, la question est de savoir quelles sont les étapes à effectuer sur l'instance de TableView pour qu'elle soit GC (à un moment donné). comme l'enlever du graphique de scène comme vous l'avez dit. Oui, je l'enlève du graphique de la scène. et je comprends son GC jusqu'à quand le recueillir, mais il n'est pas recueilli, même quand il n'y a pas assez d'espace libre, je suis sûr qu'il réside dans la mémoire. – user3164187
La suppression des listes jointes à la table est vraie. Mais définir 'setonmouseclicked' sur null n'est pas la bonne façon de supprimer listner. vérifiez que vous supprimez vraiment les listes ajoutées avec addListner ou bind – user43968