Rah*_*hul 6 java garbage-collection
据我所知,在java中,如果我们想手动调用垃圾收集器,我们可以做System.gc().
1.我们在覆盖的finalize()方法中执行的操作是什么?
2.如果我们想手动调用JVM垃圾收集器,是否需要覆盖finalize()方法?
我们在覆盖的finalize()方法中执行的操作是什么?
手动释放空闲内存(通过一些本机调用),即不由GC管理.这是一个非常罕见的情况.有些人还在那里检查,与对象相关的其他资源已经被释放 - 但它仅用于调试目的而且不太可靠.
你必须记住:
finalize 关于记忆和记忆.所以永远不要放在那里释放任何其他资源(如文件句柄,锁).必须手动释放所有这些资源.
覆盖终结与呼叫无关System.gc().
其他人已经解释了最终方法.
但请注意,最佳实践是设计"关闭"/"清理"/"终止"方法来关闭/清理对象,并要求开发人员明确调用此方法.终结器应仅用作安全网.(参见Joshua Bloch撰写的"有效Java"的"第7项:避免终结者")
更新:
在这种情况下,还要考虑实现AutoCloseable以支持try-with-resources块.
Rob*_*een -1
1.我们在重写的finalize()方法中做了哪些操作?
清理垃圾收集无法处理的资源。
2.如果我们想手动调用JVM垃圾收集器,是否需要重写finalize()方法?
不,这两件事是无关的。
Finalize 当然不应该调用垃圾收集器本身。事实上,finalize 是由垃圾收集器调用的(但根本不保证被调用)。
| 归档时间: |
|
| 查看次数: |
15987 次 |
| 最近记录: |