簡體   English   中英

如何使列表中的對象符合垃圾回收的條件?

[英]How to make object in List eligible for garbage collection?

我理解當一個對象被添加到List時,List會根據這個問題的答案保留對該對象的引用。 這個java對象是否有資格在List中進行垃圾回收

那么如何使List中的對象符合垃圾收集條件,以便從堆中刪除它而不占用內存?

我問,因為在JavaFX中,Vboxs getChildren方法返回包含vbox的子節點的可觀察列表。 如果刪除了一個UI元素但不符合垃圾回收的條件,那么這個對象是否仍然在堆消耗內存上?

從中刪除引用應該使它們成為垃圾收集的主題(只要沒有其他對象保留引用!)。

你知道,這就是GC如何工作的全部想法:它保留那些活着的對象(可以從你的初始起點到達)。 其他一切都是垃圾; 一旦GC決定收集垃圾,可以處置。 而且要確切地說:你必須明白這是兩個不同的活動。 對象X“變成垃圾”之間可能需要很長時間; 並且“X被收集;內存被釋放”。

可以使用WeakReferences來避免這種情況; 但是,當然,這需要一些代碼將最初將這樣的WeakReference對象推送到列表中。 所以,如果你“擁有”這段代碼,你可以改變它。 但當然:這意味着在訪問WeakReference時,您始終必須檢查WeakReference后面的對象是否仍然存在。

那么如何使List中的對象符合垃圾收集條件,以便從堆中刪除它而不占用內存?

假設這些對象僅由此List引用,只需使用clear方法即可

如果刪除了一個UI元素但不符合垃圾回收的條件,那么這個對象是否仍然在堆消耗內存上?

只要一個對象被至少另一個本身不符合垃圾收集條件的對象硬引用,objet本身就不符合垃圾收集的條件,因此它不會被GC收集,它將保留在堆。

如果您無法從List中刪除該對象,我可以考慮處理此問題的唯一方法是將對象包裝到WeakReference

暫無
暫無

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

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