java不同垃圾回收器_细述 Java垃圾回收机制→Types of Java Garbage Collectors

本文非原创,翻译自Types of Java Garbage Collectors

在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的。和C语言不一样的是Java程序员不需要手动写垃圾回收相关的代码。这是使得Java如此流行,同时也是Java能帮助程序员写出更好的Java应用的优点之一。

本文将会介绍各种不同类型的Java垃圾回收器。垃圾回收是Java用来将程序员从分配和释放内存的琐事中解放出来的自动过程。

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

Serial Garbage Collector

Parallel Garbage Collector

CMS Garbage Collector

G1 Garbage Collector

86b5ce20a62a2d993c8bb5e7c576e421.png

这四种类型的垃圾回收器都有各自的优点和缺点。最重要的是程序员可以选择JVM使用哪种类型的垃圾回收器。我们可以通过传递不同的JVM参数来设置使用哪一个。各个垃圾回收器在不同应用场景下的效率会有很大的差异。因此了解各种不同类型的垃圾回收器以及它们的应用场景是非常重要的。

Serial Garbage Collector

串行垃圾回收器控制所有的应用线程。它是为单线程场景设计的,只使用一个线程来执行垃圾回收工作。它暂停所有应用线程来执行垃圾回收工作的方式不适用于服务器的应用环境。它最适用的是简单的命令行程序。

使用-XX:+UseSerialGCJVM参数来开启使用串行垃圾回收器。

Parallel Garbage Collector

并行垃圾回收器也称作基于吞吐量的回收器。它是JVM的默认垃圾回收器。与Serial不同的是,它使用多个线程来执行垃圾回收工作。和Serial回收器一样,它在执行垃圾回收工作是也需要暂停所有应用线程。

CMS Garbage Collector

并发标记清除(Concurrent Mark Sweep,CMS)垃圾回收器,使用多个线程来扫描堆内存并标记可被清除的对象,然后清除标记的对象。CMS垃圾回收器只在下面这两种情形下暂停工作线程,

在老年代中标记引用对象的时候

在做垃圾回收的过程中堆内存中有变化发生

对比与并行垃圾回收器,CMS回收器使用更多的CPU来保证更高的吞吐量。如果我们可以有更多的CPU用来提升性能,那么CMS垃圾回收器是比并行回收器更好的选择。

使用-XX:+UseParNewGCJVM参数来开启使用CMS垃圾回收器。

G1 Garbage Collector

G1垃圾回收器应用于大的堆内存空间。它将堆内存空间划分为不同的区域,对各个区域并行地做回收工作。G1在回收内存空间后还立即堆空闲空间做整合工作以减少碎片。CMS却是在全部停止(stop the world,STW)时执行内存整合工作。对于不同的区域G1根据垃圾的数量决定优先级。

使用-XX:UseG1GCJVM参数来开启使用G1垃圾回收器。

Java 8 的优化

在使用G1垃圾回收器是,开启使用-XX:+UseStringDeduplacatonJVM参数。它会通过把重复的String值移动到同一个char[]数组来优化堆内存占用。这是Java 8 u 20引入的选项。

以上给出的四个Java垃圾回收器,在什么时候使用哪一个去决于应用场景,硬件配置和吞吐量要求。

Garbage Collection JVM Options

下面是些主要的与Java垃圾回收相关的JVM选项。

Type of Garbage Collector to run

选项

描述

-XX:+UseSerialGC

串行垃圾回收器

-XX:+UseParallelGC

并行垃圾回收器

-XX:+UseConcMarkSweepGC

CMS垃圾回收器

-XX:ParallesCMSThread=

CMS垃圾回收器–使用的线程数量

-XX:UseG1GC

G1垃圾回收器

GC 优化选项

选项

描述

-Xms

初始堆内存大小

-Xmx

最大堆内存大小

-Xmn

年轻代的大小

-XX:PermSize

初始永久代的大小

-XX:MaxPermSize

最大的永久代的大小

Example Usage of JVM GC Options

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

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

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

相关文章

js修改地址栏url_不同寻常的地址栏过渡

前几天,我在推特上看到这样一张图。原来地址栏还能这么玩,瞬间就觉得自己弱爆了。然后我决定去实现一下这个效果,然后做成一个库。画了一个晚上,终于做好了。这是最后的成果。这个库使用非常的简单。你只需要,yarn add…

kaggle数据集_ArXiv170万篇论文数据集上线Kaggle!

大数据文摘出品学术圈的朋友对ArXiv肯定都不陌生。在将近30年的时间里,ArXiv通过公开访问学术文章为公众和研究社区提供了一个更高效的学术成果沟通平台,从物理学到计算机科学的许多子学科,以及介于两者之间的所有内容,包括数学&a…

万能驱动xp离线版_教你用SC封装软件来封装XP系统

今天我们来讲解一下如何用SC软件来封装XP系统。今天的讲解只演示基本的SC封装软件,具体的封装前的准备工具,我们不进行讲解,当然前期的准备工作也是有很多,首先我们先要安装虚拟机软件,并在虚拟机上面安装好原版的XP系…

java dispo lock_java实现文件上传和下载(1)

原理: 使用html 的 标签,提交form 的几个属性必须为: methodpost encTypemultipart/form-data;组件:smartUpload或者commons fileuploadsmartUpload代码实现1。文件预览function showImage(obj){var strobj.value;$("#id").html(&q…

剪板机自动上下料_机器人联轴器,用于机器人自动化上下料

关注点击蓝字,关注我吧纤薄型机器人联轴器,可搬运重量范围从 1kg 至 1,000kg,用于高效机器人自动化机床上下料,多年来受到广泛认可。紧凑型微型联轴器适合于最近迅速发展的小型机器人应用领域。无人操作时工艺可靠性高模块的特殊混…

java 格式化 布尔型_Java基础篇(1)-格式化

本文目录:十进制数字格式化——DecimalFormat数字格式化基类——NumberFormat字符串格式化类——String.format()Linux输出格式化——printf1. 十进制数字格式化(DecimalFormat)decimal是对数字进行格式化,比如取2位小数,这是最常见的。Java提…

一旦有辞职念头就干不长了吗_每天都有辞职不想上班的冲动,你有吗?

我从大学毕业到今天,工作的时间将近10年了。直到现在,我还经常有辞职的想法。我觉得现在职场真的不好混,不如意的事情十之八九,有了辞职冲动是非常正常的,不必一上来就刻意的否定,或者克制。依照我的职场经…

mysql 序号_脚本搭建Nginx、Redis、MySql、Maven

当你面对一个全新的Linux系统时,是如何部署搭建项目环境呢?是否是一个一个软件安装呢?小编在往期文章中介绍了相关软件的安装方法,但是你是否发现不同的软件安装下来是否会出现问题呢?今天就教大家如何使用脚本一键安装…

mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考

【环境介绍】云数据库MySQL 5.7【背景描述】业务需要:需要对16370077的表数据进行更新部分数据操作UPDATE P_MOXXXX_REXXXX SET FISAVAILABLE 1 WHERE FREG_ID IN (SELECT FREG_ID FROM P_MOXXXX_REXXXX_UPDATE_TEMP);【按照正常流程更新数据操作】使用archery的SQ…

业务中台建设与应用_容易网业务中台建设,助力企业数字化转型

“中台”这个概念自去年流行以来,至今仍然搅动着市场。期间,既有阿里、腾讯、百度、字节跳动、美团、滴滴等等头部互联网企业刮起的转型风,也有茅台延后中台签约、服装品牌CIO被开除等风波。尽管存在争议,但这不影响越来越多的企业…

java由大到小输出整数xvz_【视频+图文】Java经典基础练习题(三):输入3个整数,并将其由小到大输出...

java经典实例书店书畅想畅销书109.6元包邮(需用券)去购买 >目录https://www.cnblogs.com/Qpgshare/p/12588923.html一、视频讲解https://www.cnblogs.com/Qpgshare/p/12588923.html二、思路分析https://www.cnblogs.com/Qpgshare/p/12588923.html总结:https://ww…

压力测试过负载均衡_性能测试的方法有哪些?

压力测试:压力测试的关键字就是“极端”。通过对系统的极端加压,从而观察系统的所表现出来性能问题。再对此性能问题进行分析,从而达到系统优化的目的。所以压力测试就是一定要让系统出问题,如果系统没有出问题,那么压…

java比ios慢_Android为什么比iOS慢

有些人会觉Android应用没有iOS应用使用得流畅,我觉得主要原因有以下几点:第一,因为Android平台相较于iOS起步晚,平台不成熟,初期的开发者水平也有限,没有很关注性能优化,只是想做出可用的应用&a…

output怎么用_如何用 C++ 写一个可编程软件渲染器?

今天你想用最新的 D3D12 画一个三角形,少说也要上千行代码了,对于初学者来讲,这个门槛是非常高的,太多干扰了,而一千多行代码,已经足够你重头实现一个简易版 D3D 了,为什么不呢?比起…

mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来触发器:某个表发生更改时自动处理。触发器是MySQL响应delete,insert&…

创建时间指定日期 java,Java避坑之如何创建指定时间Date对象

在翻看自己以前写的惨不忍睹的代码时,发现了自己曾经写的一个跟Date有关的坑。Date date new Date(2020, 1, 1);System.out.println(date);我的目的是想创建一个2020年1月1日的时间对象date,但是我们创建的date真的就代表2020年1月1日吗?错&…

pagerank数据集_从数据结构到算法:图网络方法初探

机器之心原创作者:朱梓豪编辑:Qing Lin如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地。其实早在很多年前,图神经网络就以图嵌入、图表示学习、网络嵌入等别名呈现出来,其实所有的这些方法本…

php curl上传文件返回false,php curl上传文件$_FILES为空的问题

PHP 5.0~5.6 各版本兼容的cURL文件上传最近做的一个需求,使用PHP cURL上传文件。踩坑若干,整理如下。不同版本PHP之间cURL的区别PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求。传统上,…

netty 客户端断开 异常处理_netty案例,netty4.1基础入门篇八《NettyClient半包粘包处理》发数据方式》...

小傅哥 | https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获。专注于原创专题案例编写,目前已完成的专题有;Netty4.x实战专题案例、用Java实现JVM、基于JavaAgent的全链路监控、手写RPC框架、架构设计专题案例、源码分析等。你…

Java Windows注销用户,中止Windows从Java注销

EDIT2对于那些跟随讨论的人,我留下了我的第一个答案,但似乎他们没有工作。首先找到我的真正解决方案好吧,所以我认为这实际上有效,但它并不完全可以接受,因为它使用了受限制的API部分(但它自Java 1.3以来就存在并且仍然…