Java和垃圾回收中的WeakReference

时间:2018-07-03 06:31:24

标签: java memory-leaks

一个简单的问题,执行方法时会发生垃圾回收吗?我相信一段代码值得一千个单词,所以我们开始:

        <form class="addressselect" method="POST" action=''>

        <input type='hidden' name='csrfmiddlewaretoken' value='TARLwNZUb0SL06Btika0xKR2AXIDrEnEbKDLiDnpNdcGL8SvwDMxjZkODJAZrrnO' />



          <tr><th><label for="id_billing_address_0">Billing address:</label></th><td><ul id="id_billing_address">
    <li><label for="id_billing_address_0"><input type="radio" name="billing_address" value="18" required id="id_billing_address_0" />
 434 Pine Street, Vancouver, BC</label>

</li>
    <li><label for="id_billing_address_1"><input type="radio" name="billing_address" value="15" required id="id_billing_address_1" />
 123 fake street, Calgary, AB...</label>

</li>


</ul></td></tr>

确实需要您的专家建议。谢谢:)

已编辑: 如果这 是可能的,我正在考虑创建一个扩展 public void start() { // view is an instance of WeakReference<View> and is not null if (view.get() != null) { fetchFeaturedProducts(view.get().getCategory()); // Some work // More work // And more work // // Garbage collections happens, now view.get() is null // // Is it possible? // If yes, then I think there is now way to get around it other then checking right before dereferencing? // Or am I wrong and being paranoid? // Or is there a sophisticated way to resolve this issue other than using Kotlin? fetchProducts(view.get().getCategory(), Manufacturer.All_COMPANIES, Tarteeb.TARTEEB_NONE, true); } } 的虚拟类,并重写WeakReference方法以在那里检查get。如果它是null,则返回不执行任何操作的伪对象null。 但是我感觉这更多的是破解而不是解决方案。还有更好的主意吗?

1 个答案:

答案 0 :(得分:2)

这绝对可以而且实际上必须发生-如果没有执行任何方法,JVM将终止。当然,详细信息取决于您实际的JVM供应商,操作系统和硬件,但是可以在分配正在进行或同时进行时触发集合。它可以停止方法或让它们部分继续。您对此无能为力(而且很少需要照顾)。

此外,引用处理可能独立于所有其他处理,因此引用在所有情况下都可能为空。

处理引用变为null的方法(实际上对于正常的getter也有效)是先分配给局部变量,然后检查该变量是否为null。它永远不会在您的视线范围内发生变化,并且它将在范围的生命周期内保持引用对象的生命(如果不使用变量,则会受到一些限制)。