2013-01-15 42 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对内存管理没有影响。