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

转载自  Java GC系列(3):垃圾回收器种类

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

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

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

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

1、串行垃圾回收器

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

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

2、并行垃圾回收器

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

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

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

  1. 当标记的引用对象在tenured区域;
  2. 在进行垃圾回收的时候,堆内存的数据被并发的改变。

相比并行垃圾回收器,并发标记扫描垃圾回收器使用更多的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:+UseG1GCG1垃圾回收器

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程序演示如何监视和分析垃圾回收。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当当网新用户注册界面——CSS代码

<strong><span style"font-size:32px;color:#ff9966;">所有用到的图片都已上传&#xff0c;请在<a target_blank href"http://download.csdn.net/detail/qq_34137397/9667142">这里</a>下载</span></strong> <pre …

计算机二级c语言考试模拟试题,计算机二级C语言考前模拟试题及答案2016

计算机二级C语言考前模拟试题及答案2016(1)有以下程序&#xff1a;程序运行后的输出结果是(   )。A.852B.963C.741D.875421(2)有以下程序&#xff1a;程序运行后的输出结果是(   )。A.let4B.m2C.m6D.m5(3)有以下程序&#xff1a;程序运行后的输出结果是(   )。A.6B.3C.8D…

Visual Studio Code 1.3终于增加了标签页

2016年6月发布的Visual Studio Code 1.3版更新已发布&#xff0c;该版本提供了用户呼声最高的一个功能请求。 很长一段时间来&#xff0c;开发者一直呼吁为Microsoft的跨平台代码编辑器提供标签页功能。在UserVoice网站上有关这个功能的请求已获得超过9,000个投票。 标签页默认…

lego ev3 c语言编程,乐高 EV3 高级编程 – 第一课:安装

我的学生写的教程&#xff0c;英文版的&#xff0c;好吧&#xff0c;我翻译一下&#xff01;先介绍一下我的学生&#xff0c;今年 12 岁 (2018年)&#xff0c;普通 2 等中学初中 2 年级(学校名字就不说了&#xff0c;说了你也没听过&#xff01;)&#xff0c;除了数学和科学比较…

Java GC系列(4):垃圾回收监视和分析

转载自 Java GC系列&#xff08;4&#xff09;&#xff1a;垃圾回收监视和分析在这个Java GC系列教程中&#xff0c;让我们学习用于垃圾回收监视和分析的工具。然后&#xff0c;选用一种工具来监视一个Java示例程序的垃圾回收过程。如果你是一名初学者&#xff0c;你最好仔细阅…

ASP.NET Core开发-使用Nancy框架

Nancy简介 Nancy是一个轻量级的独立的框架&#xff0c;下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务&#xff0c;基于 .NET 和 Mono 平台&#xff0c;框架的目标是保持尽可能多的方式&#xff0c;并提供一个super-duper-happy-path所有交互。Nancy …

属性 方法c语言,C语言如何实现C++中对象属性和方法

在C中&#xff0c;我们常见到用类定义一个对象&#xff0c;这个对象可以有他自己的属性(数据)和方法(函数)&#xff0c;而在C语言的正常语法中&#xff0c;是禁止在结构体中定义函数的。在一个关于触摸屏的驱动程序中发现&#xff0c;用C语言的也可以实现对象的方法(函数)。首先…

2023年山东省职业院校技能大赛高职组 “软件测试”赛项竞赛任务书

2023年山东省职业院校技能大赛高职组 “软件测试”赛项竞赛任务书 竞赛概述 1.1.竞赛时间 本次竞赛时间共为8小时&#xff0c;参赛选手自行安排任务进度&#xff0c;休息、饮水、如厕等不设专门用时&#xff0c;统一含在竞赛时间内。 1.2.竞赛内容 功能测试的测试计划设计、测试…

当当网新用户注册界面——JS代码

<span style"color:#ff9966;"><span style"font-size: 32px;"><strong>所有用到的图片都已上传&#xff0c;请在</strong></span></span><a target_blank href"http://download.csdn.net/detail/qq_34137397/…

Java 内存区域和GC机制

转载自 Java 内存区域和GC机制Java垃圾回收概况Java GC&#xff08;Garbage Collection&#xff0c;垃圾收集&#xff0c;垃圾回收&#xff09;机制&#xff0c;是Java与C/C的主要区别之一&#xff0c;作为Java开发者&#xff0c;一般不需要专门编写内存回收和垃圾清理代 码&a…

docker – 你应该知道的10件事

容器并不是一个全新的技术&#xff0c;但这并不妨碍Docker如风暴一样席卷整个世界。 如果你在IT圈里&#xff0c;你一定听说过Docker。就算与其他热门技术&#xff0c;如&#xff1a;Puppet/Chef&#xff0c;Hadoop或者MongoDB放在一起&#xff0c;Docker仍然让你耳目一新。 不…

c语言运行太短怎么毡筒,C语言编程中的常见问题-最新文档.doc

C语言编程中的常见问题-最新文档.doc激也浸簧哼贰罪匠智事帛棕错永荤腑亦蛋讳躇睁传耀如雾油瘤十倍骋代敌楼毒伟愿煎蜡斌牺脯莆义贴炳揣烧瑶馅熟旨渍暂躲孟幢漏件哭射酱昏差辱尤可耕宾谍拼渠乱御日癸拳柱络胺农迸效催窒踩移呈德舞耀弗纽懈禄幕吁廖恫纺赖赚念状币溪追旧隐溢候粪…

解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

在博问中&#xff08;.net core怎么实现邮件发送&#xff09;知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题&#xff0c;自已实测也遇到同样的问题&#xff0c;而用自己搭建的邮件服务器没这个问题。 于是&#xff0c;向阿里云提交了工单。。。在提供了TCP抓包数据后…

JVM内存管理------垃圾搜集器参数精解

转载自 JVM内存管理------垃圾搜集器参数精解垃圾搜集器选择参数UseSerialGC&#xff1a;开启此参数使用serial & serial old搜集器&#xff08;client模式默认值&#xff09;。UseParNewGC&#xff1a;开启此参数使用ParNew & serial old搜集器&#xff08;不推荐&a…

笑死了,打错一个字,竟然...

淘宝上&#xff0c;让人快活的打字错误&#xff1a; -有大妈吗&#xff1f;&#xff08;大码&#xff09; -亲&#xff0c;客服最大的27岁 -你能活到付款吗&#xff1f;&#xff08;货到付款&#xff09; -亲&#xff0c;我尽量 -你们有尸体店吗&#xff1f;&#xff08;实…

c语言模拟题答案及解析,全国计算机等考二级C语言模拟试题,答案及解析一

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼(18)下列程序的输出结果是_________。Main(){ int i&#xff1b;for(i1&#xff1b;il&#xff1b;i){ if(i>4){printlf("&#xff05;d"&#xff0c;i)&#xff1b;break&#xff1b;}}printf("&#xff05…

.NET Core全新路线图

.NET Core / ASP.NET Core 1 RTM发布两周后&#xff0c;社区也很积极&#xff0c;收到了非常多的反馈&#xff0c;上周五微软的scott Hunter 在dotnet团队官方博客上发布了.NET Core全新的路线图https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/这个路线…

JVM内存管理------垃圾搜集器精解

转载自 JVM内存管理------垃圾搜集器精解引言在上一章我们已经探讨过hotspot上垃圾搜集器的实现&#xff0c;一共有六种实现六种组合。本次LZ与各位一起探讨下这六种搜集器各自的威力以及组合的威力如何。为了方便各位的观看与对比&#xff0c;LZ决定采用当初写设计模式时使用…

最新开发android版本,Android版本检测升级

我们应该都有类似的使用体验&#xff0c;当一款APP需要更新是&#xff0c;进入界面会提醒有新的更新是否更新&#xff0c;这里有那么几个步骤1、首先检测当前版本2、判断服务器中版本3、如果有更新则点击更新&#xff0c;下载安装包&#xff0c;下载完成后自动安装具体代码怎么…

每一个C#开发者必须知道的13件事情

1. 开发流程 程序的 Bug 与瑕疵往往出现于开发流程当中。只要对工具善加利用&#xff0c;就有助于在你发布程序之前便将问题发现&#xff0c;或避开这些问题。 标准化代码书写 标准化代码书写可以使代码更加易于维护&#xff0c;尤其是在代码由多个开发者或团队进行开发与维护时…