Java:瞬态对象是垃圾收集的吗?

时间:2013-01-15 09:42:55

标签: java garbage-collection transient

我的程序显示了内存泄漏的趋势。当内存使用率达到峰值时,GC计数更多,对象被垃圾收集。

我们发现一个类是内存泄漏趋势的原因。

但是我想检查为什么这个类实际上是垃圾收集的,当我探索这个类时,类中只有一个瞬态对象。

瞬态对象是未序列化的对象。但是,瞬态性质与垃圾收集有关吗?

5 个答案:

答案 0 :(得分:8)

没有瞬态物体这样的东西。存在瞬态字段,在序列化期间会被忽略 - 但这对垃圾回收没有影响。

基本上,我认为你需要到别处寻找你的泄漏(如果确实你甚至泄漏)。

答案 1 :(得分:2)

  

瞬态性质是否必须对垃圾收集做任何事情?

不,没有。

transient关键字表示它不应该是序列化的,所以如果它意味着反序列化的对象比它们原本要小。

  

我们发现一个类是内存泄漏趋势的原因。

您将遇到内存泄漏,因为您在不需要时将这样的对象保留在集合中。您必须确保在不需要时以这种方式保留的对象被删除。


仅仅因为您保留数据,并不意味着您有泄漏。您可能需要这些数据,因此您需要的内存超出预期。在这种情况下,您需要通过设置-Xmx-mx命令行选项来增加最大内存。

答案 2 :(得分:1)

不,没有关系。请记住,如果GC最终正确清理了所有内容,您不会遇到内存泄漏的情况;这是GC的工作方式。你不应该担心已故的GC,如果你是,你只需要调整JVM参数。

答案 3 :(得分:0)

瞬间不会影响垃圾收集。

  • 也许在紧密循环中查找正在使用的对象,其中对象相互引用,这可能会减慢垃圾收集速度。

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

  • 或许看一下调整垃圾收集设置。 ConcurrentSweepGC可以提供帮助。

  • 或许只是看看分配更多的堆栈和堆空间。

答案 4 :(得分:0)

“可以被垃圾收集的瞬态对象”确实存在于Java中,对于应该在gc运行时立即收集的对象使用WeakReference,并且SoftReference用于更好地保留但应该是如果内存不足则丢弃。

transient关键字对内存管理没有影响。