Java有四种类型的垃圾回收器:

串行垃圾回收器(Serial Garbage Collector) 并行垃圾回收器(Parallel Garbage Collector) 并发标记扫描垃圾回收器(CMS Garbage Collector) G1垃圾回收器(G1 Garbage Collector)

每种类型都有自己的优势与劣势。重要的是,我们编程的时候可以通过JVM选择垃圾回收器类型。我们通过向JVM传递参数进行选择。每种类型在很大程度上有 所不同并且可以为我们提供完全不同的应用程序性能。理解每种类型的垃圾回收器并且根据应用程序选择进行正确的选择是非常重要的。

1、串行垃圾回收器

串行垃圾回收器通过持有应用程序所有的线程进行工作。它为单线程环境设计,只使用一个单独的线程进行垃圾回收,通过冻结所有应用程序线程进行工作,所以可能不适合服务器环境。它最适合的是简单的命令行程序。

通过JVM参数-XX:+UseSerialGC可以使用串行垃圾回收器。

2、并行垃圾回收器

并行垃圾回收器也叫做 throughput collector 。它是JVM的默认垃圾回收器。与串行垃圾回收器不同,它使用多线程进行垃圾回收。相似的是,它也会冻结所有的应用程序线程当执行垃圾回收的时候

3、并发标记扫描垃圾回收器

并发标记垃圾回收使用多线程扫描堆内存,标记需要清理的实例并且清理被标记过的实例。并发标记垃圾回收器只会在下面两种情况持有应用程序所有线程。

当标记的引用对象在tenured区域; 在进行垃圾回收的时候,堆内存的数据被并发的改变。 相比并行垃圾回收器,并发标记扫描垃圾回收器使用更多的CPU来确保程序的吞吐量。如果我们可以为了更好的程序性能分配更多的CPU,那么并发标记上扫描垃圾回收器是更好的选择相比并发垃圾回收器。

通过JVM参数 XX:+USeParNewGC 打开并发标记扫描垃圾回收器。

4、G1垃圾回收器

G1垃圾回收器适用于堆内存很大的情况,他将堆内存分割成不同的区域,并且并发的对其进行垃圾回收。G1也可以在回收内存之后对剩余的堆内存空间进行压缩。并发扫描标记垃圾回收器在STW情况下压缩内存。G1垃圾回收会优先选择第一块垃圾最多的区域

通过JVM参数 –XX:+UseG1GC 使用G1垃圾回收器

Java 8 的新特性

在使用G1垃圾回收器的时候,通过 JVM参数 -XX:+UseStringDeduplication 。 我们可以通过删除重复的字符串,只保留一个char[]来优化堆内存。这个选择在Java 8 u 20被引入。

我们给出了全部的四种Java垃圾回收器,需要根据应用场景,硬件性能和吞吐量需求来决定使用哪一种。

垃圾回收的JVM配置

下面的JVM关键配置都与Java垃圾回收有关。

运行的垃圾回收器类型

配置 描述

-XX:+UseSerialGC 串行垃圾回收器 -XX:+UseParallelGC 并行垃圾回收器 -XX:+UseConcMarkSweepGC 并发标记扫描垃圾回收器 -XX:ParallelCMSThreads= 并发标记扫描垃圾回收器 =为使用的线程数量 -XX:+UseG1GC G1垃圾回收器 GC的优化配置

配置 描述 -Xms 初始化堆内存大小 -Xmx 堆内存最大值 -Xmn 新生代大小 -XX:PermSize 初始化永久代大小 -XX:MaxPermSize 永久代最大容量

使用JVM GC参数的例子

java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar java-application.jar

在Java垃圾回收教程的下一部分,我们将会用一个Java程序演示如何监视和分析垃圾回收。

java gc种类_Java GC系列(3):垃圾回收器种类相关推荐

  1. Java GC系列(3):垃圾回收器种类

    2019独角兽企业重金招聘Python工程师标准>>> Java有四种类型的垃圾回收器: 串行垃圾回收器(Serial Garbage Collector) 并行垃圾回收器(Para ...

  2. java gc 触发_Java GC种类和触发时机

    jvm中分为堆和非堆 堆 = 新生代-YoungGen(eden + survivor1 + survivor2) + 老年代-OldGen(tenured) 非堆 = 永久代-PermGen 在默认 ...

  3. system.gc会立即执行垃圾回收吗_JVM垃圾回收系列之 垃圾回收器

    java垃圾收集器的分类以及特点如下所示: 1.串行垃圾回收器.这是一个单线程的收集器,就是说在gc回收的时候,无论是年轻代还是老年代,都是一个线程去执行,并且在执行期间,挂起用户线程,直到收集工作完 ...

  4. java gc 时间_Java GC日志查看,GC日志时间分析

    Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集. UsePa ...

  5. java gc 例子_Java GC.drawImage方法代码示例

    import org.eclipse.swt.graphics.GC; //导入方法依赖的package包/类 void paintElement(PaintEvent e) { GC g = e.g ...

  6. java 5 多线程_Java基础系列五、多线程

    1.什么是进程?什么是线程? 进程概念:在计算机中运行的软件,是操作系统中最基础的组成部分 .进程是容器,里面装的都是线程. 线程概念:就是运行在进程中的一段代码,是进程中最小组织单元. 注意: 1. ...

  7. java nio多路复用_Java NIO系列教程(六) 多路复用器Selector

    多路复用器Selector是Java NIO编程的基础,熟练地掌握Selector对于掌握NIO编程至关重要.多路复用器提供选择已经就绪的任务的能力.简单来讲,Selector会不断地轮询注册在其上的 ...

  8. JVM (二) 垃圾回收机制概念+垃圾回收器种类

    前言 做一个有趣的程序员.哈哈哈哈 本次铁村的小蓝猫主要给大家详细分享JVM中垃圾回收机制 学习JVM 肯定是要了解垃圾回收机制的. 分享前,我们先了解下本次分享内容的框架. 一.垃圾回收机制定义 1 ...

  9. Java性能最后一个领域:去除垃圾回收器

    来自RedHat的性能和OpenJDK开发者Aleksey Shipilëv,提交了一份新的JEP草案,其内容为创建一个无操作垃圾回收器:一种实际上不进行实际内存回收的GC方式.该回收器旨在帮助JVM ...

最新文章

  1. 图像识别-opencv
  2. 经管资源库项目的总结笔记
  3. 用 C 语言开发一门编程语言 — 语法解析器
  4. leetcode算法题--大礼包
  5. USB Host Device And OTG
  6. iOS之深入解析AFNetworking的底层原理
  7. Graph Theory Class(Min25求1~n质数和)
  8. C# 数据的加密解密
  9. 禁售苹果手机_资讯丨苹果一天股价暴跌10%丨安卓充电配件或将迎来收费丨苹果向福州中院提交iPhone合规证据...
  10. 字符串截取mysql
  11. 最近发现一个小生意非常不错
  12. join left semi_Hive的left join、left outer join和left semi join三者的区别
  13. 重t2加权是什么意思_魔兽世界怀旧服:详解盗贼T2.5套装,别犹豫真香
  14. MATLAB 矩阵及运算
  15. php 微信 40125,微信公众号问题:quot;errcodequot;:40125,quot;errmsgquot;
  16. cidaemon.exe过程cpu入住率和关闭cidaemon.exe加工方法
  17. 为什么学习Vue框架??
  18. 如何在 Python3 中对列表 通过比较排序(不懂就问)?
  19. unity中AO、metallic、roughness贴图的使用方式
  20. 南加大计算机专业本科sat要求,南加州大学本科申请需要什么条件

热门文章

  1. mongo查看数据库空间大小
  2. 121. Leetcode 5. 最长回文子串 (动态规划-子序列问题)
  3. 30. Leetcode 83. 删除排序链表中的重复元素 (链表-双指针)
  4. SiameseNet(Learning Text Similarity with Siamese Recurrent Networks)
  5. MCMC笔记:蒙特卡罗方法
  6. 深度学习核心技术精讲100篇(七十九)-深度学习应用实战案例:携程金融自动化迭代反欺诈模型体系
  7. 数据挖掘领域十大经典算法初探
  8. Python入门100题 | 第061题
  9. matplotlib-pie-绘制饼状图
  10. 知识点讲解五:处理js异步加载问题