myu*_*uce 2 java garbage-collection sonarqube
当你做下面的事情,
@Override
protected void finalize() throws Throwable {
////////////////////////
this.aVeryBigComponent = null;
////////////////////////
super.finalize();
}
Run Code Online (Sandbox Code Playgroud)
声纳抱怨
不好的做法 - Finalizer只会使字段为空
findbugs:FI_FINALIZER_ONLY_NULLS_FIELDS
除了字段外,此终结器不执行任何操作.这是完全没有意义的,并且要求对象被垃圾收集,最终确定,然后再次收集垃圾.你应该删除finalize方法.
只要我知道将字段设置为null有助于垃圾收集器在第一次运行/生成中销毁对象.如果我没有将该字段设置为null,则该对象可能会被发送到第二代并等待更多.
你怎么看?
如果我没有将该字段设置为null,则该对象可能会被发送到第二代并等待更多.
如果您根本没有终结器,那么您的对象将有资格进行垃圾收集,并且其字段不会被计为GC根,因此其他对象可能同时有资格进行垃圾收集.
即使您确实需要终结器,除非终结器恢复对象,否则最终对象仍然有资格进行垃圾回收,因此其字段不会保持其他对象的活动状态.
在Java中编写终结器是非常非常好的主意...如果它只是将字段设置为null,那肯定是一个坏主意.(这几乎肯定会损害性能,而不是帮助它.)
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |