2013-01-15 45 views
4

我的程序顯示內存泄漏的趨勢。當內存使用量達到峯值時,GC計數更多,並且垃圾收集對象。Java:是否收集臨時對象垃圾?

我們發現一個類是內存泄漏趨勢的原因。

但我想檢查爲何類實際上是垃圾回收,當我探索類,只有一個在一流的瞬態對象。

瞬態對象是未序列化的對象。但是暫時性與垃圾收集有什麼關係?

回答

7

有沒有這樣的事情作爲一個瞬態的對象。有一些短暫的字段,在序列化過程中會被忽略 - 但對垃圾收集沒有影響。基本上,我認爲你需要到別處尋找你的泄漏(如果你確實有有泄漏)。

+1

@Pratik:請不要編輯帖子,以便在代碼字體中放置條款時,他們不是代碼。 –

2

並短暫性都與垃圾收集什麼?

沒有,什麼都沒有。

transient關鍵字表示它不應該被序列化,所以如果什麼這將意味着反序列化對象是小於他們原本是。

我們發現一個類是內存泄漏趨勢的原因。

由於您在不需要它時將這樣的對象保存在集合中,因此會產生內存泄漏。當你不需要它們時,你必須確保以這種方式保留的對象被移除。


僅僅因爲你保留了數據,並不意味着你有泄漏。您可能需要這些數據,因此您需要的內存超出您的預期。在這種情況下,您需要通過設置-Xmx-mx命令行選項來增加最大內存。

1

不,沒有關係。請記住,如果GC最終清理了所有內容,則不會遭受內存泄漏;這是GC工作的方式。你不應該擔心遲到的GC,如果你是,你只需要調整JVM參數。

0

瞬態不會影響垃圾收集。

  • 也許尋找一個緊密的循環,其中的對象必須彼此,這可能減緩垃圾收集下來的引用使用的對象。

  • 也許探索使用Java的弱引用。

  • 也許看調整垃圾收集設置。 ConcurrentSweepGC可以提供幫助。

  • 也許只是看分配更多的堆和棧空間。

0

「臨時對象,可以是垃圾收集」的確存在於Java,使用WeakReference對於應儘快收集GC運行和SoftReference的東西,最好保持,但如果內存應該被拋棄的對象低。

關鍵字transient對內存管理沒有影響。