2021年02月22日JVM-1

JVM-1

自动内存管理, 垃圾收集器和内存分配策略

 

自动内存管理

运行时数据区

 

 

 

  • 线程独享

    • 虚拟机栈

    • 本地方法栈

    • 程序计数器

  • 线程共享

    • 方法区

分配空间方式

  • 指针碰撞

    • TLAB

  • 空闲列表

对象的内存布局

  • 对象头

  • 实例数据

  • 对其填充

 

 

对象的访问定位

  • 直接指针

    • HotSpot

  • 使用句柄

垃圾收集器和内存分配策略

对象已死?

  • 引用计数法

    • 很难解决对象之间的相互引用问题

  • 可达性分析

    • 本地变量表中引用的对象

      • 静态属性引用的对象

    • JNI中引用的对象

    • 虚拟机中内部的引用

    • 同步锁持有的对象

    • 反映java虚拟机内部情况的JMXBean等

引用

  • 强引用

  • 软引用

  • 弱引用

  • 虚引用

⭐作业1举例说明这几个引用

⭐垃圾收集算法

  • 分代收集理论

  • 跨代解决

    • 记忆集

  • 标记复制

    • 流程

    • 实现简单,运行高效

    • 浪费空间

    • Eden 和survivor区 8:1

  • 标记整理

    • 移动对象比较消耗时间

    • 得到一个规整的内存

  • 标记清除

    • 执行效率不稳定

    • 空间碎片化问题

HotSpot算法实现(简单有所了解即可)

想要更往前的冲击,还是要了解的

  • OopMap

    • 用来枚举根节点的

  • 安全点

    • 抢先式中断

    • 主动式中断

    • 从这个点遍历OopMap用的

  • 安全区域

    • 在这个区域内的线程只能等待遍历Oopmap结束才能出来,同时遍历OopMap不需要考虑在安全区域的线程

  • 记忆集与卡表

    • 用来解决跨带引用的

  • 三色标记

    • 原始快照

      • g1 Shenandoah

    • 增量更新

      • cms

posted @ 2021-02-23 02:36  八佰山兵上北坡  阅读(37)  评论(0编辑  收藏  举报