gpt4 book ai didi

java - 您如何看待 Sonar 的不良做法 - Finalizer 仅将字段设为空?

转载 作者:行者123 更新时间:2023-12-02 13:25:04 25 4
gpt4 key购买 nike

当你执行如下操作时,

@Override
protected void finalize() throws Throwable {
////////////////////////

this.aVeryBigComponent = null;

////////////////////////

super.finalize();
}

Sonar 提示

Bad practice - Finalizer only nulls fields

findbugs : FI_FINALIZER_ONLY_NULLS_FIELDS

This finalizer does nothing except null out fields. This is completely pointless, and requires that the object be garbage collected, finalized, and then garbage collected again. You should just remove the finalize method.

只要我知道将字段设置为 null 有助于垃圾收集器在第一次运行/生成时销毁对象。如果我不将该字段设置为 null,该对象可能会被发送到第二代,并会等待更多时间。

你觉得怎么样?

最佳答案

If I do not set the field to null, that object may be sent to the second generation and will wait more.

如果您根本没有终结器,那么您的对象将有资格提前进行垃圾回收,并且其字段不会被计为 GC 根,因此其他对象可能也符合资格同时进行垃圾收集。

即使您确实需要终结器,除非该终结器复活该对象,否则终结的对象仍然有资格进行垃圾回收,因此其字段不会使其他对象保持 Activity 状态。

用 Java 编写终结器很少是一个好主意……如果它只是将字段设置为 null,那绝对是一个坏主意。 (这几乎肯定会损害性能而不是帮助它。)

关于java - 您如何看待 Sonar 的不良做法 - Finalizer 仅将字段设为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18590936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com