JAVA语言 GC垃圾回收器种类
小标 2018-12-19 来源 : 阅读 499 评论 0

摘要:本文主要向大家介绍了JAVA语言 GC垃圾回收器种类,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言 GC垃圾回收器种类,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


Java GC垃圾回收器种类。在这篇教程中我们将学习几种现有的垃圾回收器。在Java中,垃圾回收是一个自动的进程可以替代程序员进行内存的分配与回收这些复杂的工作。这篇是垃圾回 收教程系列的第三篇,在前面的第2部分我们看到了在Java中垃圾回收是如何工作的,那是篇有意思的文章,我推荐你去看一下。第一部分介绍了Java的垃 圾回收,主要有JVM体系结构,堆内存模型和一些Java术语。


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参数的例子

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


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


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程