Object的finalize()方法的作用是否与C++的析构函数作用相同
- 与C++的析构函数不同,析构函数调用确定,而它的是不确定的
- 将未被引用的对象放置于F-Queue队列;当垃圾回收器宣布一个对象死亡,至少需要经过两个阶段,1.当对象进行可达性分析时发现没有和GC ROOTS相连接就会被第一次标记;2.判断对象是否覆盖finalize(),如果覆盖,并且未被引用过这个方法的对象就会被放在F-Queue中,最后由JVM执行该方法。
- 方法执行随时可能会被终止
- 给予对象最后一次重生的机会
java中的强引用、软引用、弱引用、虚引用
强引用(Strong Reference)
- 最普遍的引用:Object obj = new Object();
- 抛出OutOfMemoryError 终止程序也不会回收具有强引用的对象;
- 通过将对象设置为null来弱化引用,让它被回收
- 对象处在有用但非必须的状态
- 只有当内存空间不足时,GC会回收该引用的对象的内存
- 可实现高速缓存
eg:
String str = new String(“abc”);
SoftReference softRef = new SoftReference(Str); //软引用
- 非必须对象,比软引用更弱一些
- GC时会被回收
- 被回收的概率也不大,因为GC线程优先级较低
- 适用于引用偶尔被使用且不影响垃圾收集的对象
eg:
String str = new String(“abc”);
WeakReference weakRefer = new WeakReference(str);
- 不会决定对象的生命周期
- 任何时候都可能被垃圾收集器回收
- 跟踪对象被垃圾收集器回收的活动,起哨兵作用
- 必须和引用队列ReferenceQueue联合使用
eg:
ReferenceQueue queue = new ReferenceQueue();
PhantomReference ref = new PhantoReference(“abc”,queue);
文章图片
文章图片
文章图片
推荐阅读
- java|大学想要学习JAVA,发展前景如何,该从哪里开始()
- java开发|你觉得学 Python 还是 Java 更好找工作(2022最新分析指南。)
- Java/Android中的优先级任务队列的实践
- Ubuntu 18及以上版本配置 IP 的方法,你 get 了吗()
- Spring Security实现基于RBAC的权限表达式动态访问控制
- 数据建模软件Chiner,颜值与实用性并存
- Java|中文和特殊字符前端传入后端
- 笔记|JAVA中将泛型定义在接口上
- 大数据|OpenSergo 正式开源,多家厂商共建微服务治理规范和实现