【问题标题】:How to keep alive Java objects?如何使 Java 对象保持活动状态?
【发布时间】:2011-10-18 12:01:08
【问题描述】:

我只是在考虑一种方法,即使 Java 对象在合理的时间内没有被引用,也不会被垃圾回收。

怎么做?

【问题讨论】:

  • 如果您引用这些对象 - 您对保持内存占用有什么兴趣?
  • 听起来好像有什么诡异的事情发生了:)
  • 当你没有引用它们时,为什么你希望对象保持活动状态(它们将无法检索以对它们做任何事情)
  • 也许 OP' 正在测试一些内存泄漏检测工具:D
  • 如果一个对象没有被引用,你将如何再次找到它?

标签: java object keep-alive


【解决方案1】:

在您的主类中有一个static 容器,您可以在其中放置对对象的引用。它可以是MapList,等等。然后您将始终拥有对该对象的引用,并且它不会被回收。 (为什么你会想要这样做是另一个问题......)

也就是说:只要对象的可达引用存在,它不会被垃圾回收。如果您的代码有引用并尝试使用它,则该对象将在那里。你不需要做任何特别的事情来实现它(你也不应该)。 (reachable 引用意味着该引用来自某个东西,它本身可以从它所引用的东西之外的东西访问。更简单地说:GC 了解循环引用,因此可以清理 A 和B 即使它们相互引用,只要没有其他东西引用它们中的任何一个。)

【讨论】:

    【解决方案2】:

    [...] 即使它没有在合理的时间内被推荐

    如果将来有任何可能性对象将被访问,则该对象不会被垃圾回收

    这是因为如果你有一个对象的引用,它就不会被垃圾回收,如果你没有这个对象的引用,就没有办法您将可以随时访问它。

    换句话说,一个普通的引用永远不会神秘地变成null,因为垃圾收集器观察到该对象已经很长时间没有被访问并认为是时候回收它了。

    【讨论】:

      【解决方案3】:

      您还可以在其自己的类中创建对象的静态实例。例如,如果它是一个单例,在类中有一个静态实例字段。

      【讨论】:

        【解决方案4】:

        有一些机制可以保存对对象的引用,但如果没有其他引用,仍然允许对其进行垃圾回收。

        看看 WeakReference 和 SoftReference。如果您想了解有关 jvm 的可访问性的更多详细信息,请参阅:

        http://download.oracle.com/javase/6/docs/api/java/lang/ref/package-summary.html#reachability

        就时间而言,垃圾收集器不知道也不关心对象的使用频率。另一个对象有对目标的引用(即使它没有使用它),或者没有对目标的引用。如果没有对该对象的引用,则永远无法再次使用它,最终将被释放(即使您想,也无法再次获得对该对象的引用)对象的寿命越长,寿命越长由于分代垃圾收集,jvm 需要释放它。

        【讨论】:

          【解决方案5】:

          我只是在考虑一种方法,即使 Java 对象在合理的时间内没有被引用,也不会被垃圾回收。

          从表面上看,这个问题没有意义。如果一个对象没有被引用(或者更准确地说,如果它不可访问),那么垃圾收集器将收集它。如果你想防止一个对象被垃圾回收,那么你必须确保它是可访问的。 (实际上,它必须是高度可达以保证它不会被 GC 处理:请参阅@Austen Holmes 的回答和他引用的页面。)

          但实际上,我认为您将“已引用”/已引用/可访问与已访问或已使用混淆了;即使用 act 访问字段或调用对象的方法。如果这就是您要问的,那么我可以保证垃圾收集器既不知道也不关心您的代码是否最近访问/使用了一个对象。

          可达性标准实际上是关于您的代码是否可以在将来的某个时间点访问该对象,以及(因此)是否需要保留该对象以使其正常工作。可达性规则意味着如果一个对象可以被访问,那么它被保留。距离您上次访问它的时间没有区别。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-17
            • 1970-01-01
            • 1970-01-01
            • 2012-03-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多