当前位置:网站首页>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
咱们将在下一篇重点讲述不同的垃圾回收器。
边栏推荐
- ~76 sprite map
- README. txt
- 汇编语言段定义
- The 116 students spent three days reproducing the ByteDance internal real technology project
- After the subscript is used to assign a value to the string type, the cout output variable is empty.
- 我走过最迷的路,是字节跳动程序员的脑回路
- 字节跳动技术面试官现身说法:我最想pick什么样的候选人
- The "advertising maniacs" in this group of programmers turned Tiktok advertisements into ar games
- Alibaba cloud server builds SVN version Library
- ~87 animation
猜你喜欢
Activiti directory (III) deployment process and initiation process
Thank you for your invitation. I'm in the work area. I just handed in the code. I'm an intern in the next ByteDance
Redis standalone startup
我走过最迷的路,是字节跳动程序员的脑回路
MySQL string function
Fdog series (I): think about it. It's better to write a chat software. Then start with the imitation QQ registration page.
MySQL optimization notes
~73 other text styles
The most lost road I have ever walked through is the brain circuit of ByteDance programmers
Assembly language segment definition
随机推荐
~82 style of table
Shell_ 00_ First meeting shell
Full record of ByteDance technology newcomer training: a guide to the new growth of school recruitment
Monomer application concept
Activiti directory (I) highlights
ByteDance technical Interviewer: what kind of candidate do I want to pick most
Alibaba cloud server builds SVN version Library
[unsolved] 7-15 shout mountain
汇编语言段定义
Fdog series (III): use Tencent cloud SMS interface to send SMS, write database, deploy to server, web finale.
~87 animation
Data transfer instruction
DS18B20数字温度计系统设计
Eight part essay that everyone likes
redux使用说明
Activiti目录(五)驳回、重新发起、取消流程
汇编课后作业
姚班智班齐上阵,竞赛高手聚一堂,这是什么神仙编程大赛?
Shell_ 05_ operator
[graduation project] QT from introduction to practice: realize imitation of QQ communication, which is also the last blog post in school.