zoukankan      html  css  js  c++  java
  • Java对象已死吗 深入理解Java虚拟机笔记

    1、引用计数器法
    给每个对象设置一个计数器,每当有一个引用就给计数器的值+1,引用时小时就减一,当计数器值为0是就可以回收掉了。
    主流虚拟机都没有使用这种算法,循环依赖问题
    2、可达性分析:
    思路是通过一些列的“GC ROOTS”对象作为起始点,从这些对象往下搜索,搜索所走过的路线称为引用链,当一个对象到GC ROOTS没有任何引用链的时候,就说这个对象不可用

    再谈引用:
    1、强引用:代码之间普遍存在 ,垃圾收集器永远不会回收掉的对象
    2、软引用:是指一些有用非必须的对象,在系统即将发生内存溢出异常之前,将会把这些对象列进回收范围进行第二次回收
    3、弱引用:强度比软引用低,智能生存到下一次GC
    4、虚引用:唯一的目的是在这个对象被收集器会收拾收到一个系统通知,有什么实例吗?

    4、生存还是死亡
    即使可达性分析不可达的对象,也并不是非死不可,要宣告一个对象死亡,至少要经历两次标记过程;如果对象不可达,那他将被第一次标记,
    并且进行一次筛选,筛选的条件是此对象否有有必要执行finalize()方法,当对象没有覆盖此方法或者该方法已经被虚拟机调用过,则被视为没有必要执行
    有过有必要,则会放到一个F-QUEUE中,有一个低优先级的Finalizer县城区执行它,但并不会等该方法运行结束,finalize()是对象逃脱死亡的最后一次机会,使用this引用赋值,可以存活

  • 相关阅读:
    Oracle 网络
    Oracle 实例管理
    Oracle 体系结构四 逻辑和物理存储结构之间的关系
    Oracle 体系结构三 后台进程
    Oracle 体系结构二 内存结构
    Oracle 体系结构一 概述
    SQL 二
    SQL 一
    如何获取SQL Server数据库元数据的方法
    VB.NET中使用代表对方法异步调用
  • 原文地址:https://www.cnblogs.com/masterZ/p/15185641.html
Copyright © 2011-2022 走看看