垃圾回收器前面我们已经介绍了垃圾回收机制,现在我们来介绍常用的垃圾回收器
STW概念我们在正式讲解垃圾回收器之前,我们先来回顾一个概念STW:
- STW即Stop The World,意思是暂停所有进程处理
- 因为我们在进行垃圾处理时,会涉及到地址空间的整合(标记整理法) , 这时所有CPU都需要停止操作
- 单线程
- 适用于堆内存较小,适合单人电脑
文章插图
我们所需配置:
// 设置 新生代回收方法复制 老年代回收方法为标记整理法-XX:+UseSerialGC = Serial + SerialOld
我们来简单解释一下:- 串行操作属于单核CPU处理
- 我们在处理该CPU的垃圾回收时,只有该线程的CPU进行操作
- 但同时老年代采用标记整理法会涉及到内存地址重新规划 , 所以其他CPU也需要暂停操作,即STW
- 多线程
- 适用于堆内存较大,需要多核CPU
- 让单位时间内,STW时间最短,例如每次STW0.2秒 , 但执行两次,共用0.4s(总时间最短)
文章插图
我们所需配置:
// 设置垃圾回收器方法XX:+UseParallelGC ~ -XX:+UseParallelOldGC// 自适应新生代晋升老年代的阈值处理-XX:+UseAdaptiveSizePolicy// 设置垃圾回收时间占总时间的比例(与-XX:MaxGCPauseMillis=ms冲突)-XX:GCTimeRatio=ratio// 设置最大STW时间(与-XX:GCTimeRatio=ratio冲突)-XX:MaxGCPauseMillis=ms// 设置最大同时进行CPU个数-XX:ParallelGCThreads=n
我们来简单解释一下:- 吞吐量优先垃圾回收器是多核CPU处理回收器
- 当一个进程发生垃圾回收时,我们会将所有CPU都用于垃圾回收 , 这时CPU利用率为100%
- 多线程
- 适用于堆内存较大,需要多核CPU
- 让单次STW时间最短,例如每次STW0.1秒,但执行五次,共用0.5s(单次时间最短)
文章插图
我们所需配置:
// +UseConcMarkSweepGC:设置并发标记清除算法 , 允许用户进程单独进行,但部分时间还需要阻塞// -XX:+UseParNewGC:设置新生代算法,// SerialOld:当老年代并发失败,采用单线程方法-XX:+UseConcMarkSweepGC ~ -XX:+UseParNewGC ~ SerialOld// -XX:ParallelGCThreads=n:并行数设置为n// -XX:ConcGCThreads=threads:并发线程最好设置为CPU的1/4个数 , 相当于只有1/4个CPU在处理垃圾回收-XX:ParallelGCThreads=n ~ -XX:ConcGCThreads=threads// 预留空间(因为并发清理时其他进程可能会产生一些垃圾,这些垃圾目前无法处理,我们需要预留一定空间进行储存)-XX:CMSInitiatingOccupancyFraction=percent// 我们在重新标记阶段前,先对新生代进行垃圾回收,节省其标记量-XX:+CMSScavengeBeforeRemark
我们来简单解释一下:- 响应时间优先垃圾回收器是多核CPU处理回收器
- 首先我们的CPU1进行初始标记 , 其他进程阻塞,仅标记一些Root对象(时间短)
- 然后我们CPU1进行并发标记,其他进程继续运行,这时用来标记所有的垃圾回收对象(时间长)
- 然后由于我们的并发标记可能会导致一些内存混乱 , 所以我们将所有CPU需要进行重新标记(时间短)
- 最后只需要对CPU1进行并发清理即可 , 其他进程继续运行
G1垃圾回收器简介首先我们先来简单介绍一下G1垃圾回收器:
- G1回收器:Garbage First
- 在2017成为JDK9的默认垃圾回收器
- 同时注重吞吐量和低延迟,默认的暂停目标是200ms
- 超大堆内存,将堆划分为多个大小相等的Region
- 整体上是标记整理法,但两个区域之间是复制算法
- -XX:+UseG1GC使用G1垃圾回收器(JDK9之前都不是默认回收器)
- -XX:G1HeapRegionSize=size设置Region的大小
推荐阅读
- 黑莓q5用安装微信的方法a 用黑莓自带的印象笔记手敲的 看不懂的宝宝们在私聊我吧
- JVM学习笔记——内存结构篇
- 【lwip】08-ARP协议一图笔记及源码实现
- 小米笔记本Pro15增强版评测_小米笔记本Pro15增强版评测表现
- 用一台笔记本电脑如何赚钱(笔记本电脑赚钱的办法)
- 四 【单片机入门】应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用
- 笔记本电脑CF中烟雾头怎么调(win10cf新版本烟雾保护头怎么调)
- 笔记本电脑配置高低怎么区分(笔记本电脑看什么配置判断好坏)
- pytorch、paddlepaddle等环境搭建 深度学习环境搭建常用网址、conda/pip命令行整理
- 三十九 Java开发学习----SpringBoot整合mybatis