Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何防止GC收集弱引用对象?_Java_Reference_Weak References - Fatal编程技术网

Java 如何防止GC收集弱引用对象?

Java 如何防止GC收集弱引用对象?,java,reference,weak-references,Java,Reference,Weak References,我有一个对象缓存,它在内部使用弱引用,有时我的对象会得到GCed,即使我仍然需要它(因此需要再次重新加载)。 我的想法是通过向该对象添加另一个引用来防止GC: Object obj = Cache.getObject(key); obj是强裁判还是弱裁判 在我的情况下,这似乎是可行的,但我不确定这是否是正确的方法,因此我希望得到任何建议 p、 我无法更改缓存实现。obj是一个正常(即强)引用 只要变量obj是可访问的,对象就不符合GC条件。因此:是的,这将阻止收集对象。obj是一个正常(即强)

我有一个对象缓存,它在内部使用弱引用,有时我的对象会得到GCed,即使我仍然需要它(因此需要再次重新加载)。 我的想法是通过向该对象添加另一个引用来防止GC:

Object obj = Cache.getObject(key);
  • obj是强裁判还是弱裁判

  • 在我的情况下,这似乎是可行的,但我不确定这是否是正确的方法,因此我希望得到任何建议


  • p、 我无法更改缓存实现。

    obj
    是一个正常(即强)引用


    只要变量
    obj
    是可访问的,对象就不符合GC条件。因此:是的,这将阻止收集对象。

    obj
    是一个正常(即强)引用


    只要变量
    obj
    是可访问的,对象就不符合GC条件。因此:是的,这将阻止对象被收集。

    一旦执行line
    object obj=Cache.getObject(key)
    ,由
    obj
    引用的对象现在被强引用,并且不会被垃圾收集(但是当
    obj
    超出范围时,被引用的对象可能有资格进行垃圾收集)。

    只要执行了
    object obj=Cache.getObject(key)
    ,被
    obj
    引用的对象现在被强引用,并且不会被垃圾收集(但是当
    obj
    超出范围时,引用的对象可能有资格进行垃圾收集).

    如果您不希望某些内容被GC'ed,则应保留对它的强引用。如果对象在最后一个强引用失效的那一微秒消失会对代码的性能产生不利影响,则该代码应被视为已损坏


    弱引用最重要的地方是,当一个对象引用了一个它并不真正关心的对象,但如果有其他对象关心它,它应该更新或监视该对象。例如,套接字监视器可能会将所有传入的数据包放入队列中,以便packet log窗口可以将它们拉出并显示。如果应该从队列中读取的对象在未通知套接字监视器的情况下消失,并且套接字监视器对队列具有强引用,则它可以继续向队列中添加数据包,即使没有人会感兴趣读取数据包。但是,如果t monitor对队列使用弱引用,然后在本应从队列读取的对象消失后的某个时间点,队列将符合垃圾收集的条件(因为套接字监视器只保存弱引用)。一旦队列被垃圾收集,套接字监视器可能会注意到其WeakReference已无效,并可能会自行关闭。

    如果不希望某些内容被垃圾收集,则应保留对它的强引用。如果对象在几微秒内消失会对代码的性能产生不利影响最后一个强引用无效,该代码应被视为已损坏


    弱引用最重要的地方是,当一个对象引用了一个它并不真正关心的对象,但如果有其他对象关心它,它应该更新或监视该对象。例如,套接字监视器可能会将所有传入的数据包放入队列中,以便packet log窗口可以将它们拉出并显示。如果应该从队列中读取的对象在未通知套接字监视器的情况下消失,并且套接字监视器对队列具有强引用,则它可以继续向队列中添加数据包,即使没有人会感兴趣读取数据包。但是,如果t monitor对队列使用弱引用,然后在本应从队列读取的对象消失后的某个时间点,队列将符合垃圾收集的条件(因为套接字监视器只保存弱引用)。一旦队列被垃圾收集,套接字监视器可能会注意到其WeakReference已无效,并可能会自行关闭。

    谢谢!我不确定这一点,因此出现了新手问题。谢谢!我不确定这一点,因此出现了新手问题。