• java垃圾回收基础


    JRE:
    JVM,Java platporm core classes, supporting Java platform libraries.

    性能指标:
    相应能力,吞吐量

    jvm的主要组件
    包括:类加载器,运行时数据区,执行引擎,
    高亮的组件时和jvm性能相关:Heap:存放对象的地方。Jit编译器对性能也有很大的影响,但很少可以调整。Garbage Collector的合理选择对性能影响很大。
    在这里插入图片描述

    Garbage Collector
    过程:
    1,mark,将未被引用的对象进行标记,图中黄色的表示标记了的对象。
    在这里插入图片描述

    2a,delete,清理未被引用的对象,
    在这里插入图片描述

    2b,delete with compacting,删除压缩。为了提升性能,可以将其余的对象压缩到一起,这样接下来分配内存就会更快和更容易。
    在这里插入图片描述

    为什么需要进行分代垃圾收集?
    就像之前说得,垃圾清理,通过标记清理是很低效的。随着分配的对象越来越多,导致垃圾回收时间越来越长,stw的时间会很长,性能越来越差。然后通过大量的经验,大多数对象的存活时间是很短的。所以需要进行分代垃圾处理。

    jvm中堆的拆分
    the heap is broken up into smaller parts or generations. The heap parts are: Young Generation, Old Generation, and Permanent Generation.
    Young Generation 分为3parts:eden,Survivor “from”,Survivor “to”。
    在这里插入图片描述

    垃圾回收过程
    1,首先,所有新建的对象都被分配空间在eden区。
    在这里插入图片描述

    2,当eden区被填满之后,就会进行一次Minor Garbage Collection。
    在这里插入图片描述

    3,将Eden所有未被引用的对象清除后,将Eden区剩下的对象,移动到Survivor区其中一个,如:S0,并给对象一个年龄1.
    在这里插入图片描述

    4,当Eden区再次被填满的时候,进行下一次Minor GC。将Eden区和S0区所有未被引用的对象清除后,再将这2各区剩下的对象移动到S1,所有对象加一岁。
    在这里插入图片描述

    5,在下一次Minor GC的时候,当Survivor区的对象达到了某个年龄如:8的时候,就会被移动到Old Generation中。
    在这里插入图片描述

    6,当Old Generation被填满的时候,就会进行一次Major GC,清理并压缩该控件。
    在这里插入图片描述

    可视GC插件
    打开如下文件,安装Visual GC插件,即可。
    在这里插入图片描述

    效果图:

    在这里插入图片描述

  • 相关阅读:
    (STM32)从零开始的RT-Thread之旅--PWM驱动ST7735调光
    SQL并行与否的性能差异
    【Web安全】HTML5安全
    NR PDSCH(一)时域资源
    点击试剂Methyltetrazine-PEG4-NHS ester,甲基四嗪-PEG4-琥珀酰亚胺酯,CAS:1802907-9
    3 Java NIO--Channel
    Centos 里面为什么有的磁盘命名/dev/vda 有的是/dev/sda ?
    舞蹈室如何打破拉新难的困境?
    【Springboot 入门培训】# 15 MyBatis-Thymeleaf 插件在项目中的应用
    virsh pool-list详解
  • 原文地址:https://blog.csdn.net/Edward_hjh/article/details/127108872