对象的一生

  1. 对象诞生
    1. 加载
      1. 加载时机
        1. 使用new关键字实例化对象
        2. 使用reflect方法对类型进行反射调用时候
        3. 处理静态字段,静态方法
        4. 含main主类会加载
        5. MethodHandle解析结果为get/put/invoke/ newInvoke special四种类型方法句柄
        6. 接口加入默认方法,实现主类初始化,接口需要先进行初始化
        7. 子类初始化,父类需要先初始化
      2. 加载过程
        1. 加载
        2. 验证
        3. 准备
        4. 解析
        5. 初始化
    2. 分配内存
      1. 根据不同的算法收集器决定使用不同的内存分配方式
        1.1 如果使用Serial,ParNew等压缩整理过程的收集器,系统采用的分配算法是指针碰撞
        1.2 如果使用的是CMS(标记清楚算法),使用空闲列表分配内存
      2. 保证并发情况下的线程安全
        2.1 CAS配上失败重试的方法保证更新操作的原子性
        2.2 把内存分配的动作按照线程分化在不同的空间进行,即每个线程在Java堆中预先分配内存
    3. 初始化零值

      保证了对象的实例字段在Java代码中可以不赋值就可以直接使用

    4. 必要设置
      1. 对类进行必要设置
        1.1 属于哪个类的实例
        1.2 如何才能找到类的元数据信息
        1.3 对象的hash码
        1.4 对象的GC分代年龄信息
        1.5 是否使用偏向锁等
    5. 构造函数
  2. 对象消亡
    1. 判断对象死亡
      1. 判断死亡方式
        1. 引用计数器法

          1. 在对象添加一个引用计数器,每当一个地方引用它时,计数器加1;当引用失效时,计数器减一;不在被引用时,对象计数器为零。
          2. 虽然占用很多内存,但是效率较高,很难解决循环引用问题
        2. 可达性分析法

          1. 可以作为GCroot对象
          1. 在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程被调用的方法对栈中引用的参数,局部变量,临时变量
          2. 在方法区中类静态变量引用的对象,譬如java类的引用类型静态变量
          3. 在方法区中常量引用的对象,譬如字符串常量池中的引用
          4. 在本地方法栈中JNI(Native)引用的对象
          5. Java虚拟机内部的引用,如基本类型对应的Class方法,一些常驻的异常对象,还有系统加载器
          6. 被同步锁持有的对象
          7. 反应Java虚拟机内部情况JMXBean,JVMTI注册的回调,本地代码缓存
      2. 死亡过程
      1. 对象不可达不一定非死不可,但最多会被标记两次
      2. 如果对象在进行可达性分析的时候,发现没有GC Roots相连的引用链,将会被第一次标记
      3. 判断是否需要执行finalize()方法,假如对象没有覆盖finalize()方法,后者方法已经被调用,都是没有必要执行
      4. 如果有必要执行,需要放入一个F-Queue的队列中,然后有一个低优先级的线程区执行finalize方法
    2. 垃圾回收算法
      1. 标记清除算法
      2. 标记复制算法
      3. 标记整理算法
    3. 垃圾处理器
      1. 标记整理
        1. Serial Old
        2. Paralled Old
      2. 标记清除算法
        1. CMS
      3. 标记复制算法
        1. Parallel Scavenge
        2. ParallelNew
        3. Serial
        4. G1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值