一、垃圾回收算法:

  • 引用计数
  • 复制算法
  • 标记-清除
  • 标记-整理

二、垃圾回收的方式:

串行(Serial)、并行(Parallel)、并发(CMS)、G1

1、串行垃圾回收器(Serial)

  • 它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程,所以不适合服务器环境。

2、并行垃圾回收器(Parallel)

  • 多个垃圾收集线程并行工作,此时用户线程是暂停的,用于科学计算、大数据处理等弱交互场景。

3、并发垃圾回收器(CMS)

  • 用户线程和垃圾收集线程同时执行(不一定是并行,可能是交替执行),不需要停顿用户线程,互联网公司多用它,适用对相应时间有要求的场景。

4、G1 垃圾回收器

  • G1 垃圾回收器将堆内存分割成不同的区域然后并发的对其进行垃圾回收。

三、如何查看默认的垃圾收集器是哪一个?

 java -XX:+PrintCommandLineFlags -version

四、默认的垃圾收集器有哪些?

UseSerialGC,UseParallelGC,UseConcMarkSweepGC,UseParNewGC,UseParallelOldGC,UseG1G  

五、垃圾收集器

Java 8 以后基本不使用 Serial Old

配置新生代收集器,老年代收集器会自动配置上

  • 新生代
  1. 串行 GC (Serial)
  2. 并行 GC (ParNew):配置-XX:+UseParNewGC,新生代并行,老年代串行
  3. 并行回收 GC (Parallel Scavenge):

串行收集器在新生代和老年代的并行化,配置-XX:+UseParallelGC,新生代、老年代都是并行

可控的吞吐量

自适应调节策略

  • 老年代
  1. 串行 GC (Serial Old)
  2. 并行 GC (Parallel Old)
  3. 并发标记清除 GC (CMS)
    • 优点:并发收集停顿低
    • 缺点:并发执行对 CPU 资源压力大,采用的标记清除算法会导致大量碎片
配置参数 新生代垃圾收集器 新生代垃圾收集算法 老年代垃圾收集器 老年代垃圾收集算法
-XX:+UseSerialGC Serial 复制算法 Serial Old 标记-整理算法
-XX:+UseParNewGC ParNew 复制算法 Serial Old 标记-整理算法
-XX:+UseParallelGC Parallel Scavenge 复制算法 Parallel Old 标记-整理算法
-XX:+UseParalleOldlGC Parallel Scavenge 复制算法 Parallel Old 标记-整理算法
-XX:+UseConcMarkSweepGC ParNew 复制算法 CMS+Serial Old 标记-清除算法
-XX:+UseG1GC G1整体上采用标记-整理算法 局部是通过复制算法,不会产生内存碎片    

代码验证:

/**
* 1、-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseSerialGC (DefNew+Tenured)
*
* 2、-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParNewGC (ParNew+Tenured)java8不再被推荐
* Java HotSpot(TM) 64-Bit Server VM warning: Using the ParNew young collector with the Serial old collector
* is deprecated and will likely be removed in a future release
*
* 3、-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParallelGC (PSYoungGen+ParOldGen)
*
* 4、-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParallelOldGC (PSYoungGen+ParOldGen)
*
* 5、-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseConcMarkSweepGC (ParNew+CMS)
*
* 初始标记:CMS Initial Mark
* 并发标记(和用户线程一起):CMS-concurrent-mark
* 重新标记:CMS Final Remark
* 并发清除(和用户线程一起):CMS-concurrent-sweep
*/
public class GCoverheadDemo { public static void main(String[] args) {
int i = 0;
List<String> list = new ArrayList<>(); while (true) {
list.add(String.valueOf(++i).intern());
}
}
}

六、如何选择垃圾收集器?

  • 单 CPU 或者小内存,单机程序:-XX:UseSerialGC
  • 多 CPU 需要最大吞吐量,如后台计算型应用:-XX:UseParallelGC 或者 -XX:UseParallelOldGC
  • 多 CPU 追求低停顿时间,需要快速响应,如互联网应用:-XX:+UseConcMarkSweepGC

java面试-垃圾回收器谈谈你的理解的更多相关文章

  1. [Java基础]-- Java GC 垃圾回收器的分类和优缺点

    https://blog.csdn.net/high2011/article/details/80177473?utm_source=blogxgwz2 参考:elasticsearch实战-使用G1 ...

  2. [JVM 相关] Java 新型垃圾回收器(Garbage First,G1)

    回顾传统垃圾回收器 HotSpot 垃圾收集器实现 Serial Collector(串型收集器) 使用场景,大多数服务器是单核CPU. 适用收集场景:1. 新生代收集(Young Generatio ...

  3. 流操作结束后,一定要调用close(). java有垃圾回收器, 这样做是多此一举吗?

    流不单在内存中分配了空间,也在操作系统占有了资源, java的gc是能从内存中回收不使用的对象, 但对操作系统分配的资源是无能为力的, 所以就要调用close()方法来通知OS来释放这个资源.

  4. java面试一日一题:如何设计一款垃圾回收器

    问题:如果让你设计一个垃圾回收器,你会考虑哪些问题 分析:该问题主要考察对java中垃圾回收器的理解,要理解怎么回收:一款好的垃圾回收器有哪些衡量指标 回答要点: 主要从以下几点去考虑, 1.垃圾回收 ...

  5. java面试一日一题:java中的垃圾回收器

    问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...

  6. java面试一日一题:再谈垃圾回收器中的串行、并行、并发

    问题:请讲下java中垃圾回收器的串行.并行.并发 分析:该问题主要考察在垃圾回收过程中垃圾回收线程和用户线程的关系 回答要点: 主要从以下几点去考虑, 1.串行.并行.并发的概念 2.如何考虑串行. ...

  7. Java垃圾回收器的工作原理

    上课,老师照本宣科,实在难以理解,干脆就看书包里的Java书,正好看了Java的垃圾回收器是如何工作的,觉得有必要记录一下. 参考于 Java编程思想第四版(Thinking in Java) 老年代 ...

  8. [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

    目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...

  9. 【转】Java学习---垃圾回收算法与 JVM 垃圾回收器综述

    [原文]https://www.toutiao.com/i6593931841462338062/ 垃圾回收算法与 JVM 垃圾回收器综述 我们常说的垃圾回收算法可以分为两部分:对象的查找算法与真正的 ...

随机推荐

  1. SPC空投价值高达310万美金,生态建设者直呼真香!

    市场上面有句名言:"人赚不到自己认知以外的财富",这在数字加密上也是共通的.早在本月12日,也就是前天,NGK官方发行的第N波利好---SPC侧链代币空投已经陆续发放了,NGK以及 ...

  2. USDN代币发行 关于USDN代币

    "稳定币"是数字货币的一种,但与主流币存在的差异是,它可以通过锚定法币和加密资产等手段来维持币价的相对稳定.提及稳定币,一般会先介绍三种模式: 法币托管模式.数字资产抵押模式和无抵 ...

  3. NGK的发行量是多少?NGK销毁机制是怎么样的?

    代币销毁(Coin Burning),是指将代币从流通中永久性去除.换句话说,被销毁的代币相当于被永久性冻结,再也无法流入市场.那为什么要进行代币销毁呢? 销毁加密货币,可以使剩余加密货币的价值升高, ...

  4. 离场定高转弯DF与CF的对比

    也许是刚学会CAD的缘故,配合风螺旋插件,画图的感觉真是蛮爽的,忍不住画了一张又一张. 接着昨天的离场保护区,我们来聊一下PBN指定高度转弯保护区的画法.指定高度转弯的计算本身没有太多复杂的地方,真正 ...

  5. ServiceMesh

    传统微服务架构 在微服务模式下,企业内部服务少则几个到几十个,多则上百个,每个服务一般都以集群方式部署,这时自然产生两个问题: 一.服务发现:服务的消费方(Consumer)如何发现服务的提供方(Pr ...

  6. Docker镜像构建原理解析(不装docker也能构建镜像)

    在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image. docker client 会先检查本地有没有im ...

  7. 通过 .NET NativeAOT 实现用户体验升级

    前言 TypedocConverter 是我先前因帮助维护 monaco-editor-uwp 但苦于 monaco editor 的 API 实在太多,手写 C# 的类型绑定十分不划算而发起的一个项 ...

  8. 树莓派4B安装官方Ubuntu20 Server版(64位)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. MySQL之四 存储引擎

    1.介绍 存储引擎MySQL中的"文件系统" MySQL体系结构 InnoDB存储引擎介绍 My1SAM 和InnoDB区别  mysql MariaDB [(none)]> ...

  10. pytorch(05)计算图

    张量的一系列操作,增多,导致可能出现多个操作之间的串行并行,协同不同的底层之间的协作,避免操作的冗余.计算图就是为了解决这些问题产生的. 计算图与动态图机制 1. 计算图 计算图用来描述运算的有向无环 ...