Java常见的垃圾回收器GC

本节讲解一下常见的垃圾回收器。需要特别注意的是,每一种垃圾回收器都会存在用户线程(即用户程序)暂停的问题,只不过每种回收器用户线程暂停的时长优化程度不一样。在启动JVM时,可以通过“指定参数-xx:+垃圾回收器名称”来自定义JVM使用何种垃圾回收器进行垃圾回收。如果未指定的话,JVM将根据服务器的CPU核数和JDK版本,自动选择对应的默认垃圾回收器。

(1)Serial(-XX:+UseSerialGC)  

这是一个单线程运行的串行垃圾收集器,是JVM中最基本、比较早期的垃圾回收器。在JDK1.3之前是JVM唯一的新生代垃圾回收器。当JVM需要进行垃圾回收的时候,会暂停所有的用户线程直到垃圾回收结束。它采用复制算法进行垃圾回收。

(2)SerialOld(-XX:+UseSerialGC)   

这是串行垃圾回收器的老年代回收器版本,同样是单线程运行的垃圾回收器。它采用标记-整理算法进行垃圾回收。

(3)ParNew(-XX:+UseParNewGC)  

串行垃圾回收器的多线程并行运行版本。它采用复制算法进行垃圾回收。由于采用多线程运行,因此如果服务器是单核CPU的,那么其效率会远低于单线程串行垃圾回收器。

(4)ParallelScavenge(-XX:+UseParallelGC)    

和ParNew 回收器有点类似,它是一个新生代收集器,俗称吞吐量优先收集器。它采用复制算法进行垃圾回收。所谓吞吐量就是CPU用于运行用户代码(用户线程)的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码(用户线程)时间 / (运行用户代码时间 + 垃圾收集时间)。

(5)ParallelOld(-XX:+UseParallelOldGC)       

是老年代的并行垃圾回收器,是老年代吞吐量优先的回收器,和ParNew很类似。它采用标记-整理算法进行垃圾回收。在服务器CPU核数较多的情况下,可以优先考虑使用该回收器。

(6)CMS (-XX:+UseConcMarkSweepGC)     

这是一个多线程并发低停顿的老年代垃圾回收器,全称为Concurrent Mark Sweep,简称CMS。如果响应时间的重要性需求大于吞吐量要求并且要求服务器响应速度高的情况下,建议优先考虑使用此垃圾回收器。CMS垃圾回收器用两次短暂的暂停来代替串行或并行标记-整理算法时出现的长暂停。它采用标记-清除算法进行垃圾回收,因此很容易产生内存碎片,但是CMS回收器做了一些小的性能优化,优化措施是把未分配的内存空间汇总成一个内存地址列表,当JVM需要分配内存空间时会搜索这个列表,找到符合条件的内存空间来存储这个对象,如果寻找不到符合条件的内存空间,就会产生Full GC。并且由于该垃圾回收器是多线程并发的,很多时候GC线程和用户应用程序线程是并发执行的,因此垃圾回收时会占用很高的CPU资源。

(7)G1-GarbageFirst(-XX:+UseG1GC)    

这是JVM新推出的垃圾回收器,同时支持新生代和老年代回收,能充分利用多核CPU的硬件优势,可以并行来缩短用户线程停顿的时间,也可以并发让垃圾收集与用户程序同时进行。该垃圾回收器虽然保留了传统的分代概念,但JVM堆的内存布局已经和传统的JVM堆布局不一样了,G1将整个堆划分为很多个大小相等的独立Region区域, 新生代和老年代不再是被隔离开的,它们都是一部分不需要连续的Region区域的集合。G1同时采用标记-整理和复制等多种回收算法进行垃圾回收。

本文节选自《软件性能测试、分析与调优实践之路(第2版)》,获作者和出版社授权发布。

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

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

相关文章

Android静默安装一(Root版)

近期开发上线一个常驻app,项目已上线,今天随笔记录一下静默安装相关内容。我分三篇静默安装(root版)、静默安装(无障碍版)、监听系统更新、卸载、安装。先说说我的项目需求:要求app一直运行&…

贵价茶叶产区成谜,竹叶青茶是“行业黑马”还是“韭菜镰刀”?

撰稿|行星 来源|贝多财经 近日,央视“315”晚会曝光了自诩“高端商务白酒”的听花酒。这款白酒号称拥有提升免疫力、改善睡眠、保障男性功能等多种保健功能,标准装售价5860元,精品装售价更是达到5.86万元,昂贵程度令人瞠目结舌。…

为什么c++要在c语言的基础上添加命名空间?命名空间如何定义和使用?

1、为什么c要在c语言上增添命名空间的概念 在c语言中,定义的全局变量与库中相同,或者和别人代码结合的时候可能存在相同的命名,此时就会命名冲突。c语言是没有办法很好的解决这个问题的。 假设这样一种情况,当一个班上有两个名叫…

jmeter的函数助手使用方法

如某个上传文件接口,一个文件只能同时被一个接口调用,如果被并发同时调用就会报错 创建多个测试文件 比如50并发,创建更多的文件防止并发多时随机数生成重复 生成随机数函数 工具–函数助手-选择random-输入范围(1-696&#…

网络学习:IPV6基础配置

目录 一、配置接口的全球单播地址 二、配置接口本地链路地址 三、配置接口任播地址 四、配置接口PMTU 配置静态PMTU: 配置动态PMTU: 五、接口配置IPV6地址示例: 一、配置接口的全球单播地址 全球单播地址类似于IPv4公网地址&#xff0…

前端 js 经典:数组常用方法总结

一:不改变原数组的方法 1. join 数组拼接 let arr [1, 2, 3]; // 默认拼接 arr.join(""); // 默认 , 拼接,返回:1,2,3 // 使用 - 拼接 arr.join("-"); // 返回:1-2-3 2. concat 尾部插入 let arr [1, 2…

Redis技术学习|实战项目记录|短信登录(重点:拦截器)+ Redis代替session存储用户登录信息

学习资料声明 黑马程序员的Redis学习视频:黑马程序员Redis入门到实战教程 需要用到的知识:linux(推荐韩顺平老师的教程,学到p30,创建好虚拟机和简单的几个命令就好。)SSM。SpringBoot。 还用到了MybatisPl…

富格林:合理规避虚假风险安全盈利

富格林悉知,黄金投资不仅具有强大的保值功能,其剧烈的市场变化也隐含着巨大的盈利潜力,吸引着众多投资者入市。但投资都会存在一定的风险,因此大家在投资的过程中要学习总结一些技巧,以便能在必要时帮助投资者规避虚假…

linux系统kubernetes容器检查和恢复机制

容器检查和恢复机制 容器检查和恢复机制命令模式探针http get方式探针POD 的恢复策略 容器检查和恢复机制 在kubernetes中,可以为容器定义一个健康探针,kubelet 就会根据这个 Probe 的返回值决定这个容器的状态,而不是直接以容器是否运行&…

5G里面NR,gNB,en-gNB,ng-eNB是什么意思

不得不提一个国际组织,叫国际电信联盟(ITU, International Telecommunication Union),简称国际电联。我们先看看国际电联的自我介绍: 国际电信联盟 『国际电联 (国际电信联盟) 是主管信息通信技术事务(ICT)的联合国机…

微信打卡小程序怎么做_用户的每日习惯培养神器

微信打卡小程序:你的每日习惯培养神器 在这个快节奏的现代社会,我们每天都在忙碌中度过,有时候甚至会忘记自己曾经立下的那些小目标、小习惯。然而,随着科技的不断发展,微信打卡小程序的出现,为我们的生活…

Apollo(阿波罗)配置中心

Apollo(阿波罗)配置中心: 采用分布式架构,它能够集中管理不同环境、不同集群的配置,配置修改后能够实时推送到应用端,有可视化界面 和 规范的权限,支持 版本管理、灰度发布、监控 等功能。 主要…

早期零撸项目,预注册即将截止, AI身份项目GenomeFi明牌空投教程

简介:GenomeFi基金会旨在用个人基因信息推动生物产业发展,他们通过AI大数据平台和区块链技术验证身份、保护个人信息、提升收入。GenomeFi和CLINOMICS(一家基于基因组学疾病早期诊断的领先公司)合作提供基因诊断、早期疾病检测、个…

朋友圈之于私域的意义

朋友圈作为社交媒体的一种,是品牌主进行私域流量营销的主要载体,具有推动产品销售、传播信息等多种作用。具体来说,朋友圈在私域中的意义可以体现在以下几个方面: 1. 传播信息:朋友圈可以成为品牌主向其潜在客户传递信…

面试算法-63-全排列

题目 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 解 class Solution {public List&l…

前端学习笔记|CSS基础

css学习 中文学习网站 https://www.w3school.com.cn/ 非语义化的标签 1.div 2.span 类型选择器 类型选择器有时也叫做“标签名选择器*”*或者是”元素选择器“,因为它在文档中选择了一个 HTML 标签/元素 类选择器 类选择器以一个句点(.&#xff…

Leetcode 202:快乐数

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&#xff0c…

2024年运维相关面试题

SLA 关键词 负责系统的 SLA 代码维护、迭代更新,保证任务质量和交付及时性;推动提升服务的可靠性、可扩展性以及性能优化,保障系统 SLA为系统提供基础设施 SLA 保障 SLA保障:服务质量保障 sla 保障建设,目前一是将故…

代码随想录阅读笔记-字符串【重复的子字符串】

题目 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。 示例 1: 输入: "abab"输出: True解释: 可由子字符串 "ab" 重复两次构成。 示例 2: 输入: "aba…

爬虫入门系列-HTML基础语法

🌈个人主页:会编辑的果子君 💫个人格言:“成为自己未来的主人~” HTML基础语法 bs4解析比较简单,但是呢,首先你需要了解一丢丢的html知识,然后再去使用bs4去提取,逻辑和编写难度就会非常简…