JVM--总结

  第一部分 运行时数据内存

    程序计数器:改变程序计数器的值,可以选取下一条字节码指令。程序计数器 支持 程序控制流的指示器,分支,循环,跳转,异常处理,线程恢复等基础操作(线程私有)

    Java堆:所以对象实例和数组内存分配的地方(线程共享) 

    Java虚拟机栈:一般是指局部变量表部分,有基本数据类型,对象引用(线程私有)

    本地方法栈:有Java虚拟机栈一样,但是本地方法栈是为了本地方法使用的(线程私有)

    方法区:用于存储已被虚拟机加载的类型信息,常量,静态变量,即时编译后的代码缓存等数据(线程共享)

  第二部分 对象

    对象的创建:分配内存方式 1.指针碰撞 2 空闲列表

    对象的组成:1.对象头  2.实例数据   3填充数据

    对象的定位:1.句柄  2.指针

  第三部分 判断对象是否死亡

    可达性分析算法:从GC root 根对象啊为节点集,开始搜索对象,搜索的路径形成“引用连” ,若对象在该链上,则说明对象还可以使用,若不在,则对象不能使用

    引用计数算法:在对象中设置一个应用计数器,每当被引用就加一,若引用失效,则将减一,若数据为0时,说明该对象失效。

  第四部分 垃圾收集算法

    分代收集理论:1.弱分代理论:大多数对象就是朝生夕灭  2.强分代理论:当对象可以经过多次垃圾收集都没有消亡就难以消亡。

    标记-清除算法:首先标记要清除的对象,然后第一步完成之后,进行清除操作。缺点:1.会产生碎片空间 2.当数据庞大时,效率变低。

    标记-复制算法:把内存分为大小均等俩部分,每次只使用其中一块内存,当其中这一块内存使用完,把活着对象复制到另一块,然后把使用过后内存清空。缺点:内存变小,效率变低

    标记-整理算法:首先和标记-清理算法的标记阶段一样,然后把存活的对象移动到一端,然后以存活的对象为边界,把未存活的对象进行清除。

  第五部分 垃圾收集器

    新生代

      serial收集器:单线程,当使用该收集器时,就得停掉其他用户线程。

      ParNew收集器:实际时多线程版本的serial收集器。

      Parallel Scavenge收集器:采用标记-复制算法,可以并行的多线程收集器。

    老年代

      CMS收集器:采用的标记-清除算法,该收集器一种获取最短回收停顿时间为目标的收集器。

      Serial Old收集器:单线程,使用标记-整理算法,作用:一 在JDK5之前与Parallel Scavenge搭配,二作为CMS失败的替补方案。

      Parallel Old收集器:基于标记-整理算法,是一个并发多线程收集器,他注重吞吐量或者处理器资源较为稀缺的场合。

    新生-老年代

      G1收集器:它是一款面向服务器端应用的垃圾回收器,它的设计思路是采用基于Region的内存布局形式。

posted @ 2020-11-29 15:20  林鱼  阅读(44)  评论(0编辑  收藏  举报