一堆介绍

堆主要划分为新生代和老年代;新生代详细划分为Eden,from survivor ,to survivor;

二jdk1.8-jvm内存模型

要看详细的介绍请看作者发布的"jvm运行时数据区一文",
jdk1.8中已经取代了方法区永久带的概念转而的是在方法区中的元空间,有人也称作是直接内存​
在这里插入图片描述

二垃圾收集器示意图

图中有直线连接的说明是能够相互配合使用的垃圾收集器。
在这里插入图片描述

​三垃圾收集器介绍

算法的实现请自行搜索理解,本文不赘述。

3.1serial收集器

serial收集器(新生代)是单线程复制算法工作,当发生gc的时候,所有线程都会停止,然后进行垃圾回收,这就是为什么java程序运行卡顿的原因,the stop world因此而来

3.2ParNew收集器

ParNew收集器(新生代)其实就是Serial收集器的多线程版本,采用复制算法,参数选定和serial一样。

3.3Parallel Scavenge收集器

Parallel Scavenge收集器(新生代)复制算法;目标是达到一个可控的吞吐量(示例:99%吞吐量用来跑用户代码,1%GC)提升cpu利用率让客户有良好体验,,吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间。

​3.4 Serial Old 收集器

Serial Old 收集器是Serial 的老年代版本,采用标记整理算法。

3.5 Parallel Old 收集器

​Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和标记-整理算法。这个收集器是在JDK 1.6中才开始提供。

3.6 CMS收集器

​CMS(Concurrent Mark Sweep)收集器基于标记—清除算法实现的收集器,是一种以获取最短回收停顿时间为目标的收集器。主要优点是并发收集,低停顿,在cpu多核的情况下性能较好。

3.7G1收集器

​G1(Garbage-First)从整体来看是基于“标记—整理”算法实现的收集器,能够实现并发并行,对cpu利用率较高,减少停顿时间。目标是取代jdk1.5​发布的CMS收集器。

四gc类型和日志

具体使用gc和其他jvm​参数会在后面的jvm调优文章中发布。

4.1GC 种类

​gc 种类分为2种 ,一是新生代发生的GC(Minor GC),当经过一轮Minor GC 后 如果没有配置其他JVM参数,那么 存活的对象会进入老年代,当老年代的空间满了之后就会发生Full GC;Full GC 会产生Stop the World 代价相对比较大,如果你的项目中经常出现Full GC ,说明需要jvm调优了​。

4.2图解GC日志

在这里插入图片描述

五参考文档和公众号

《深入理解java虚拟机》

在这里插入图片描述

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐