什么是 fullgc

GC

GC 全称为garbage collection,中文含义为垃圾回收,在jvm中的含义为回收无用内存空间

Young space

中文名为年轻代或者新生代,为JVM 堆的一部分,由分代GC概念划分而来,保存生命周期较短的对象

Tenured space

中文名为老年代或年老代,为JVM 堆的一部分,由分代GC概念划分而来,保存生命周期较长的对象

Minor GC

minor gc指的是发生在年轻代或者说新生代(Young space)中的gc,也有人称其为young gc或者ygc,在下文中我们统一使用minor gc表示

Major GC

major gc指的是发生在老年代(Tenured space)中的gc,也有人称为old gc,o gc,cms gc等,在下文我们统一使用major gc表示

stop the world

指的是用户线程在运行至安全点(safe point)或安全区域(safe region)之后,就自行挂起,进入暂停状态,对外的表现看起来就像是全世界都停止运转了一样,而不论何种gc算法,不论是minor gc还是major gc都会stop the world,区别只在于stop the world的时间长短。

什么是Full GC

先说一下结论,Full GC这个概念是没有官方定义的,而且含义还特别混乱,在不同地方表达的含义是不同的,需要就不同的场景分别进行讨论。

大众认知上

在通常意义上人们口中说的Full GC为一次特殊GC行为的描述,这次GC会回收整个堆的内存,包含老年代,新生代,metaspace等,这个是最常见的一种认知,很多人也就了解到这个程度,因此在遇到一些特殊场景的时候就会发现实际情况和自己的认知会发生冲突

从GC日志上

在gc.log中会发现在部分gc日志头中也有Full GC这样的字眼,这里表示的含义是在这次GC的全过程中,都是Stop The world的状态,也就是说在这次GC的全过程中所有用户线程都是处于暂停的状态,那么在这里要喷一下中文jvm神书《深入理解JVM》了,在第二版第89页有这么一段话:

GC 日志开头的“[GC”和“[Full GC”说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的。如果有“Full”,说明这次GC是发生了Stop-The-World的,例如下面这段新生代收集器ParNew的日志也会出现“[Full GC”(这一般是因为出现了分配 担保失败之类的问题 .所以才导致STW)。如果是调用System.gc()方法所触发的收集,那么在这里将显示“[Full GC (System)”。

这段话的描述是错误的,因为在前面说过,不论何种gc算法,不论新生代或是老年代,其gc都会发生stop the world,这里正确的描述是这次GC的全过程都是Stop-The-World的

从JDK自带的工具上

使用jstat -gc命令能够查看到制定java 线程的gc次数,那么在经过我的多次尝试以及对比之后,我发现了使用jstat 查出来的FGC 次数和时间,实际上指的是老年代的收集器发生Stop the world 的次数和持续时间,对应本文而言,就是CMS收集器的Stop the world次数和时间

其他含义(坑爹版)

前面不是说到我在监控大盘上看到这个应用平均一分钟发生了十多次”Full GC”么,在我弄明白了前面两个Full GC的含义之后查看了gc.log文件,随后发现该应用实际上一次Full GC都没有出现,然后咨询了一下提供监控数据的同学,结果他说是通过JMX获取的,代码为:

ManagementFactory.getGarbageCollectorMXBeans()
然后众所周知,使用MXBean获取到的只是收集器的执行次数,和Full GC半毛钱关系都没有啊,随后在追问了一下,发现做监控系统的同学直接把CMS收集器的收集次数当做了Full GC的次数来统计,what the fuck????,只能说对于FUll GC的概念真的有很多人是一直没弄懂过的

结束语
在这篇文章快写完的时候,用google随便搜了一下就在首页找到一篇对于各类gc概念介绍得比较透彻的文章,和使用度娘一搜首页全是各种抄来抄去的错误文章相比,对比简直是太强烈了,由此得出结论,技术类的资料能在外网查就在外网查吧,省时又省力,最后附上我找到的这篇文章貌似还是plumbr的联合创始人写的,不得不说很给力了

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

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

相关文章

APP外包开发的iOS开发语言

学习iOS开发需要掌握Swift编程语言和相关的开发工具、框架和技术。而学习iOS开发需要时间和耐心,尤其是对于初学者。通过坚持不懈的努力,您可以逐步掌握iOS开发技能,构建出功能丰富、优质的移动应用。今天和大家分享学习iOS开发的一些建议方法…

【数据结构系列】链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

解决hbase节点已下线,但在status中显示为dead问题

工作中需要下线4台hbase小节点,下线完成后使用status 命令查看,有一台为dead状态: 使用status detailed 查看,发现“hd-03"这台节点是dead。 检查各节点配置文件无误,并使用 /opt/hbase/bin/hbase-daemon.sh restart master 重启两个…

less基本使用

1 less中的变量 //对值进行声明 link-color: #ccc//定义变量名称 .{sleName} {}bg: background-color; //定义属性名称 .container {{bg}: red; }2 继承(复用重复样式) //继承必须位于选择器最后 //继承选择器名不能为变量 .a:hover:extend(.b) {}.a {…

走出迷宫(多组输入bfs)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 小明现在在玩一个游戏,游戏来到了教学关卡,迷宫是一个N*M的矩阵。 小明的起点在地图中用“S”来表示,终点用“E”来表示,障碍物用“#…

浅谈人工智能技术与物联网结合带来的好处

物联网是指通过互联网和各种技术将设备进行连接,实时采集数据、交互信息的网络,对设备实现智能化自动化感知、识别和控制,给人们带来便利。 人工智能是计算机科学的一个分支,旨在研究和开发能够模拟人类智能的技术和方法。人工智能…

Redis: 详解、使用教程和示例

Redis: 详解、使用教程和示例 什么是 Redis? Redis(Remote Dictionary Server)是一个开源的、内存数据存储系统,它可以用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等…

Hadoop组件

前言 Hadoop 是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。 HDFS(hadoop分布式文件系统) 是hadoop体系中数据存储管理的基础。他是一个高度容错的系统,能检测和应对硬件故障。

后院失火、持续亏损!Mobileye半年报「不回避」竞争压力

"客户在2023年上半年非常谨慎,导致增长率低于正常水平,但我们已经看到下半年回暖趋势,预计下半年交付将比去年同期增长16%,远高于上半年。"这是Mobileye在近日公司半年报发布会上的预判。 公开数据显示,今年…

Python 实现Selenium录屏的一种方法(图片整合成动态图)

由于UI层自动化的不稳定性,经常会遇到执行中断或用例失败的问题,以下是一些常见的措施。 1.详细的日志 2.定位出错时截图 3.Pytest的缓存机制(可以记录成功了哪些失败了哪些) 4.自动重试机制(如pytest-rerunfailures) 5.用例录像 用例录像是最直观的一…

2023网络安全常用工具汇总(附学习资料+工具安装包)

几十年来,攻击方、白帽和安全从业者的工具不断演进,成为网络安全长河中最具技术特色的灯塔,并在一定程度上左右着网络安全产业发展和演进的方向,成为不可或缺的关键要素之一。 话不多说,网络安全10款常用工具如下 1、…

Opencv4基于C++基础入门笔记:图像 颜色 事件响应 图形 视频 直方图

效果图◕‿◕✌✌✌:opencv人脸识别效果图(请叫我真爱粉) 先看一下效果图勾起你的兴趣! 文章目录: 一:环境配置搭建 二:图像 1.图像读取与显示 main.cpp 运行结果 2.图像色彩空间转换 2.1 换色彩 test.h …

感受RFID服装门店系统的魅力

嘿,亲爱的时尚追随者们!今天小编要给你们带来一股时尚新风潮,让你们感受一下什么叫做“RFID服装门店系统”,这个超酷的东西! 别着急,先别翻白眼,小编来解释一下RFID是什么玩意儿。它是射频识别…

云计算——存储虚拟化功能

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前期回顾 前言 一.存储虚拟化功能 1.精简磁盘和空间回收 2.快照 (1&a…

面试热题(反转字符串中的单词)

给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在前导空格、尾随空格…

JVM——栈和堆概述,以及有什么区别?

方法栈 方法栈并不是某一个 JVM 的内存空间,而是我们描述方法被调用过程的一个逻辑概念。 在同一个线程内,T1()调用T2(): T1()先开始,T2()后开始;T2()先结束,T1()后结束。 堆和栈概述 从英文单词角度来…

Maven介绍,部署在eclipse中

目录 一.Maven介绍 1,什么是maven? 2. 为什么maven会在企业中大量使用? 3.没有使用maven的前后区别? 4.maven在Java开发中的实际效果图 二.maven部署在eclipse中 1.下载maven在其官方网址下载(当然实际下载也要根据个人的…

服务器安装Tomcat

下载Tomcat 下载地址在这: Tomcat官网 下载完成以后把压缩包上传到服务器中(我传到了www/java),进行解压(解压到),如果没有进行指定解压到哪里,默认是到root文件夹中 tar -zxvf /www/java/apache-tomcat-9.0.103.tar.…

统计学补充概念03-核密度估计

概念 核密度估计(Kernel Density Estimation,简称 KDE)是一种非参数统计方法,用于估计随机变量的概率密度函数(Probability Density Function,PDF)。它通过在每个数据点周围放置核函数&#xf…

day 10 | 232.用栈实现队列、 225. 用队列实现栈

目录&#xff1a; 解题及思路学习 232.用栈实现队列 https://leetcode.cn/problems/implement-queue-using-stacks/ 模拟题&#xff0c;用两个栈来实现队列的功能。 class MyQueue { public:stack<int> stIn;stack<int> stOut;/** Initialize your data struc…