当前位置:网站首页>JVM之垃圾回收器上篇
JVM之垃圾回收器上篇
2022-07-06 09:30:00 【机智的爆爆哥】
1.垃圾回收器分类
按工作模式
分类,垃圾回收器可以分为:
- 并发式垃圾回收
- 独占式垃圾回收
并发式指的是多个线程交替执行垃圾回收,使得程序的暂停时间减少了。
独占式指的是一旦执行垃圾回收,停止其他用户线程,也就是说一旦执行了垃圾回收,用户程序就不能工作了。
按线程数
分类,垃圾回收器可以分为:
- 串行垃圾回收器
- 并行垃圾回收器
- 并发垃圾回收器
串行GC只适合于单核CPU上使用,效果比较好,现在一般都不用了。
并行GC指的是多个线程同时执行垃圾回收,但还是属于独占式的,会有stop the world的现象。
并发GC指的是垃圾回收线程与用户线程交替执行,不许需要停顿。
按碎片处理
分类,垃圾回收器可以分为:
- 压缩式垃圾回收器
- 非压缩式垃圾回收器
这个主要针对的是标记清除算法,有些回收器是不采用这个算法的,所以才会有此分类。
按工作内存
分类,垃圾回收器可以分为新生代与老年代的垃圾回收,因为这两个区域差别很大,根据这两个区域产生了不同的垃圾回收器。
2.评估GC的性能指标
指标有许多种,大致简单介绍下。
吞吐量:指用户线程执行时间占总时间的比例,当然是越大越好。
垃圾收集开销:指垃圾回收线程占总时间的比例,越小越好。
暂停时间:这是我们常说的STW,不管哪个垃圾回收器都会有停顿时间,这是垃圾回收线程导致的,我们希望越短越好。
收集频率:指的是垃圾回收次数在一定时间内的比例,这个根据情况而定,当频率高了,单位暂停时间短,频率低了,单位暂停时间长。
内存占用:一般指的是堆区域的占用,越大能够存放的对象也就越多。
快速:有点抽象,我们希望对象不被使用后越快回收越好。
注意到我前面加粗的名词了吗?
这些组成了不可能三角,内存占用大了,垃圾回收一次对象的时间就会越长,也使得暂停时间越久,但吞吐量能够提高,反正内存小,吞吐量变低,但是暂停时间会变得小一些。
但还是有个特定标准的,因为内存相对比较便宜,我们希望在最大吞吐量的前提下,能够降低停顿时间。
3.垃圾回收器的发展史
只做了解,这里就截了张图,可以简单看下红框内容。
4.七种经典垃圾回收器
串行GC:Serial,Serial Old,这两个的区别在于前者是回收新生代的,后者回收老年代。
并行GC:ParNew,Parallel Scavenge,Parallel Old。
并发GC:CMS,G1,其中G1算上全能型选手。
5.垃圾回收器的组合关系
要知道,并不是一个JVM就用一种垃圾回收器的,他们是搭配使用的,组合如下,虚线表示会在后期版本剔除掉。
6.查看默认的垃圾回收器
在任意的程序启动前,我们可以加入JVM参数,打印下默认的垃圾回收器是什么。
-XX:+PrintCommandLineFlags
打印结果如下,jdk默认用的是ParallelGC
-XX:InitialHeapSize=265723392 -XX:MaxHeapSize=4251574272 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
咱们将在下一篇重点讲述不同的垃圾回收器。
边栏推荐
猜你喜欢
~83 form introduction
Activiti目录(四)查询代办/已办、审核
~68 Icon Font introduction
The QT program compiled on CentOS lacks a MySQL driven solution
Which is more important for programming, practice or theory [there are some things recently, I don't have time to write an article, so I'll post an article on hydrology, and I'll fill in later]
MySQL字符串函数
Shell_ 06_ Judgment and circulation
[graduation project] QT from introduction to practice: realize imitation of QQ communication, which is also the last blog post in school.
TCP的三次握手和四次挥手
~84 form supplement
随机推荐
Activiti目录(三)部署流程、发起流程
Shell_ 03_ environment variable
Mongodb learning notes
Data config problem: the reference to entity 'useunicode' must end with ';' delimiter.
登陆验证koa-passport中间件的简单使用
~71 abbreviation attribute of font
Only learning C can live up to expectations top5 S1E8 | S1E9: characters and strings & arithmetic operators
~73 other text styles
Typescript basic operations
原型链继承
ByteDance open source Gan model compression framework, saving up to 97.8% of computing power - iccv 2021
Full record of ByteDance technology newcomer training: a guide to the new growth of school recruitment
Activiti目录(五)驳回、重新发起、取消流程
The difference between URI and URL
「博士毕业一年,我拿下 ACL Best Paper」
MySQL字符串函数
汇编课后作业
The daemon thread starts redis and modifies the configuration file
Usage of insert() in vector
MySQL数字函数