美文网首页
JVM对象分配及垃圾回收机制

JVM对象分配及垃圾回收机制

作者: Dalvik_ | 来源:发表于2021-08-13 19:44 被阅读0次

    1、JVM中对象的创建过程。

    JVM中对象的创建过程
    • 划分内存的方式:
      指针碰撞:要求堆空间必须时规整的
      空间列表:空间可以是不规整的,必须设置了一个空间列表
    • 解决并发安全问题:
      CAS :compare and swap 失败重试 (无锁化 乐观机制)
      Thread Local Allocation Buffer

    2、对象的内存布局及访问方式。

    对象的内存布局

    Mark Word
    对象填充:填充对象数据满足8字节的整数

    • 对象的访问定位
      使用句柄 (做一次地址转换)
      直接指针(访问速度更快,节约一次重定位)hotspot主流 访问方式

    3、可达性分析算法与垃圾回收算法。

    JVM java中,都是自动化的垃圾回收


    判断对象的存活
    • 引用计数法(无法解决循环引用的问题)
    • 可达性分析(根可达) JVM采用的算法

    GC Roots =====> Garbage Collection RootSet
    静态变量
    线程栈变量
    常量池
    JNI指针
    内部引用:class对象、异常对象Exception、类加载器
    同步锁:synchronized对象
    内部对象:JMXBean
    临时对象:跨代引用

    • class对象回收条件

    1.class new出的所有对象都被回收掉了
    2.类加载器也需要被回收掉
    3.类 Java.lang.class对象
    4.任何地方没有被引用,并且无法通过反射调用这个类的方法
    5.参数控制 -Xnoclassgc 启动时禁止类的垃圾回收

    • Finalize
      对象的拯救,在垃圾回收的时候会回调的一个方法
      只有被回调一次(两次GC就会挂掉)

    • 各种引用
      强引用 =
      软引用 SoftRefrence(即将OOM时回收)
      弱引用 WeakRefrence(只要发生垃圾回收就会被回收)
      虚引用 PhantomRefrence(监控垃圾回收器是否正常)

    4、分代回收理论及对象的分配策略。

    几乎所有的对象都在堆中进行分配

    • 对象的分配原则
      对象优先在Eden分配
      空间分配担保
      大对象直接进入老年代
      长期存活的对象进入老年代
      动态对象年龄判定

    大对象直接进入老年代的条件:
    1.垃圾回收器 Serial ParNew
    2.-XX:PretenureSizeThreshold=4m 大于这个

    • 虚拟机的优化技术
      逃逸分析 +触发JIT(热点数据) 会被分配到栈区


      对象分配原则
    • 分代回收理论


      回收理论

    5.垃圾回收算法

    • 复制回收算法(新生代的算法)
      实现简单、运行简单
      没有内存碎片
      空间利用率只有一半

    Appel式的复制回收算法
    Appel式回收
    提高空间利用率和空间分配担保


    复制回收算法
    • 标记-清除算法(Mark-Sweep) 老年代算法
      位置不连续,产生碎片
      可以做到不暂停


      标记-清除算法
    • 标记-整理算法(Mark-Compact) (先标记->再整理->最后清除)


      标记-整体算法

    相关文章

      网友评论

          本文标题:JVM对象分配及垃圾回收机制

          本文链接:https://www.haomeiwen.com/subject/cwelbltx.html