JVM+GC解析(前提知识串联)

前提准备

  • JVM
  • GC垃圾回收
  • JVM虚拟机监控调优和故障处理
  • Tomcat和微服务优化

1、前提复习

1.1、JVM内存结构

1.1.1、

JVM体系结构概览

图中灰色部分为线程私有,几乎不存在垃圾回收
橙色部分线程共有,垃圾回收主要发生场所

  • 类装载器子系统是什么?装载什么?有哪几种装载器
    根启动类装载器:BootStrap
    扩展类加载器:Extension
    应用类加载器:AppClassloader
    可以继承Classloader,自定义类加载器
  • 双亲委派机制
  • 类加载过程中的沙箱安全机制

1.1.2、java8以后的JVM

java之后的JVM--堆内存

伊甸园区-幸存者1区-幸存者2区-养老区-(7以前是永久代)元空间

1.2、GC作用域

JVM体系结构概览

图中灰色部分为线程私有,几乎不存在垃圾回收
橙色部分线程共有,垃圾回收主要发生场所

1.3、常见垃圾回收算法

  • 引用计数
    有对象引用+1,没对象引用-1,到0为止说明需要回收。
    缺点:天生的缺陷,较难实现循环引用的问题。
    每次对对象复制时均需要维护引用计数器,且计数器本身也有一定的消耗。
    所以JVM通常不采用这种方式。
  • 复制————用于年轻代较多
    在年轻代使用
    复制之后,有交换,谁空谁是To。
    复制算法

    幸存者0区,幸存者1区,在GC之后会互换,一个From,一个To。
    优点:没有产生内存碎片,因为是整体复制。
    缺点:有点浪费空间。尤其是大对象,复制起来有些耗时。

MinorGC


MinorGC
  • 标记清除(MarkSweap)————用于老年代较多
    先标记再清除。首先标记处要回收的对象,再统一回收这些对象。


    标记清除

优点:节约了空间
缺点:产生了内存碎片

  • 标记(清除)整理————用于老年代较多
  1. 标记(Mark):与标记清除一样
  2. 压缩(Compact):再次扫描,并往一端滑动存活对象。


    标记清除整理--整理

    优点:既不浪费空间,也不会产生碎片
    缺点:滑动存活对象会耗时间。

没有完美算法,具体哪一代用什么算法,分代收集

你可能感兴趣的:(JVM+GC解析(前提知识串联))