对象死亡的两次标记
来源:互联网 发布:新华产权交易所软件 编辑:程序博客网 时间:2024/04/29 08:46
对象的要经历两个标记阶段才会真正的死亡
1.第一次标记
对象没有引用,那么对象会被第一次标记并进行一次筛选,筛选的条件是是否有必要执行finalize方法,如果该对象没有覆盖finalize方法或者finalize方法已经被虚拟机执行过
那么没必要执行
2.第二次标记,
如果有必要执行finalize 方法,那么对象会被放到一个F-queue的队列中,并在稍后由一个虚拟机建立的低优先级的Finalizer线程去执行,但并保证等待执行结束,这是
因为,如果一个对象finalize方法执行缓慢或者发生了死循环,就会导致队列中其他对象处于等待状态,finalize方法是对象逃脱的最后一次机会
两次执行结果不一样是因为,任何一个对象的finalize方法都只会被系统调用一次,第二次不会执行finalize方法。
1.第一次标记
对象没有引用,那么对象会被第一次标记并进行一次筛选,筛选的条件是是否有必要执行finalize方法,如果该对象没有覆盖finalize方法或者finalize方法已经被虚拟机执行过
那么没必要执行
2.第二次标记,
如果有必要执行finalize 方法,那么对象会被放到一个F-queue的队列中,并在稍后由一个虚拟机建立的低优先级的Finalizer线程去执行,但并保证等待执行结束,这是
因为,如果一个对象finalize方法执行缓慢或者发生了死循环,就会导致队列中其他对象处于等待状态,finalize方法是对象逃脱的最后一次机会
public class FinalizeEscapeGC { public static FinalizeEscapeGC SAVE_HOOK = null; public void isAlive(){ System.out.println("yes,i am still alive"); }@Overrideprotected void finalize() throws Throwable {super.finalize();System.out.println("finalize method executed");FinalizeEscapeGC.SAVE_HOOK = this;}public static void main(String args[]){SAVE_HOOK = new FinalizeEscapeGC();//第一次SAVE_HOOK = null;System.gc();try {Thread.sleep(5000);} catch (InterruptedException e) { e.printStackTrace();}if(SAVE_HOOK !=null){SAVE_HOOK.isAlive();}else{System.out.println("no,i am dead ");} // 第二次SAVE_HOOK = null;System.gc();try {Thread.sleep(5000);} catch (InterruptedException e) { e.printStackTrace();}if(SAVE_HOOK !=null){SAVE_HOOK.isAlive();}else{System.out.println("no,i am dead ");} } }
两次执行结果不一样是因为,任何一个对象的finalize方法都只会被系统调用一次,第二次不会执行finalize方法。
0 0
- 对象死亡的两次标记
- Java对象死亡标记的过程
- 对象死亡的过程
- 对象的生存与死亡
- Java中对象的死亡
- JVM中对象的死亡判定
- 原来是这个名字--《死亡标记》
- 图像标识:4邻域标记算法的两次扫描分析
- 04JVM-对象的死亡与对象引用
- 《标记》-编码一次,解码两次?
- JVM读书笔记之对象的生存或死亡
- 深入理解jvm:对象的生存还是死亡
- 连续new两次对象的结果比较
- Scanner对象的输入结束标记问题
- Binder对象死亡通知机制
- 判断java对象是否死亡
- 两次与死亡擦肩而过 乔布斯十年重塑美国商业
- 两次与死亡擦肩而过 乔布斯十年重塑美国商业
- Implement strStr() [LeetCode] + KMP
- 一个人的时光
- Oracel move与大数据
- TCP_TW_REUSE 含义
- 数据库杂记:oracle忘记密码
- 对象死亡的两次标记
- 三种方式监听NGUI的事件方法(七)
- 利用Java线程Thread实现接口Runnable接口使图片动起来
- IOS开发中@2x图片等适应不同分辨率手机
- iOS开发-app在itunesConnect里面的几种状态
- Hadoop MapReduce架构简介(初学学习不错)
- Eclipse中集成和调试Ant工程
- C#解析json文件的方法
- SSH整合中spring的作用