阅读 54

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):再次扫描,并往一端滑动存活对象。


    标记清除整理--整理


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

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



作者:张轶渤
链接:https://www.jianshu.com/p/69281507ba50

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐