我的程序顯示內存泄漏的趨勢。當內存使用量達到峯值時,GC計數更多,並且垃圾收集對象。Java:是否收集臨時對象垃圾?
我們發現一個類是內存泄漏趨勢的原因。
但我想檢查爲何類實際上是垃圾回收,當我探索類,只有一個在一流的瞬態對象。
瞬態對象是未序列化的對象。但是暫時性與垃圾收集有什麼關係?
我的程序顯示內存泄漏的趨勢。當內存使用量達到峯值時,GC計數更多,並且垃圾收集對象。Java:是否收集臨時對象垃圾?
我們發現一個類是內存泄漏趨勢的原因。
但我想檢查爲何類實際上是垃圾回收,當我探索類,只有一個在一流的瞬態對象。
瞬態對象是未序列化的對象。但是暫時性與垃圾收集有什麼關係?
有沒有這樣的事情作爲一個瞬態的對象。有一些短暫的字段,在序列化過程中會被忽略 - 但對垃圾收集沒有影響。基本上,我認爲你需要到別處尋找你的泄漏(如果你確實有有泄漏)。
並短暫性都與垃圾收集什麼?
沒有,什麼都沒有。
的transient
關鍵字表示它不應該被序列化,所以如果什麼這將意味着反序列化對象是小於他們原本是。
我們發現一個類是內存泄漏趨勢的原因。
由於您在不需要它時將這樣的對象保存在集合中,因此會產生內存泄漏。當你不需要它們時,你必須確保以這種方式保留的對象被移除。
僅僅因爲你保留了數據,並不意味着你有泄漏。您可能需要這些數據,因此您需要的內存超出您的預期。在這種情況下,您需要通過設置-Xmx
或-mx
命令行選項來增加最大內存。
不,沒有關係。請記住,如果GC最終清理了所有內容,則不會遭受內存泄漏;這是GC工作的方式。你不應該擔心遲到的GC,如果你是,你只需要調整JVM參數。
瞬態不會影響垃圾收集。
也許尋找一個緊密的循環,其中的對象必須彼此,這可能減緩垃圾收集下來的引用使用的對象。
也許探索使用Java的弱引用。
也許看調整垃圾收集設置。 ConcurrentSweepGC可以提供幫助。
也許只是看分配更多的堆和棧空間。
「臨時對象,可以是垃圾收集」的確存在於Java,使用WeakReference
對於應儘快收集GC運行和SoftReference
的東西,最好保持,但如果內存應該被拋棄的對象低。
關鍵字transient
對內存管理沒有影響。
@Pratik:請不要編輯帖子,以便在代碼字體中放置條款時,他們不是代碼。 –