簡體   English   中英

JavaFX TableView WeakListChangeListener內存泄漏?

[英]JavaFX TableView WeakListChangeListener Memory Leak?

我有一個JavaFX TableView,它使用來自bean的屬性對象進行填充。 所有列都具有屬性,但是在CellFactory update()方法中,一些圖形組件用於顯示數據,例如帶有多個子級的HBox。

還有一個行工廠,當該行的狀態發生變化時,它將在整個行上設置樣式。

表中的數據將更新並在數組列表中求助,該列表是從可觀察列表創建的表中項目的副本。 一旦通過執行observableList.setAll(copy)以各種方式對表項進行了更新,我還嘗試了observableList.clear(),addAll(copy)來查看它是否有所不同。

問題在於,隨着時間的流逝,似乎會出現內存泄漏。 使用MAT( https://eclipse.org/mat/ ),泄漏嫌疑人表明TableView visibleLeafColumns數據結構似乎保存着大量的WeakListChangeListener對象,這些對象沒有被垃圾收集。 該表中有6列,具有250行(每分鍾左右左右進行操作),但是運行約30分鍾后,注冊了80,000個WeakListChangeListeners!

查看TableCell的源代碼並假設我正確地閱讀了它,似乎只有在創建新TableCell時才將visibleLeafColumns添加到其中,但是我認為TableView已重用了表格單元,因此不應創建該表格單元。 http://hg.openjdk.java.net/openjfx/2.2/master/rt/file/e71070b0e0c0/javafx-ui-controls/src/javafx/scene/control/TableCell.java

我在幾年前在這里找到了類似的帖子( https://community.oracle.com/thread/2354497?tstart=0 ),我想知道是否還有其他人遇到過類似的問題。

平台:Redhat Linux v6 Java:1.7.0更新67

任何指針將非常感謝。

謝謝,

安迪

對於此問題RT-34970,有一個Jira錯誤報告。 我的同事通過定期刪除所有列並將其重新添加來解決了此問題。 這導致TableView整理了visibleLeafColumn對象,並且堆保持明智。

感謝Jewelsea和Tomas的建議。 我們確實嘗試了Java 8,但沒有出現此內存問題,但是性能似乎隨着時間的推移而下降(12小時)。 這似乎與動畫有關,因此我們將來在跳轉到Java 8時會進行適當的調查(緩存提示無濟於事)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM