![](https://img-blog.csdnimg.cn/20210909133035715.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
垃圾收集器
文章平均质量分 86
Java虚拟机中垃圾收集器是如何工作的,细节都有哪些呢,深入剖析!
壹氿
做一个有准备的人吧~
展开
-
线上项目频繁Full GC问题排查解决
现象发现项目运行一段时间后会莫名其妙的不运行了,没有任何异常日志,好像被hung住了一样,不工作了。排查1、首先查看GC日志,通过jstat -gcutil -t pid 1000 1000查看GC日志,看到FullGC的次数达到了接近两万次。。。并且GC速率没有下降的趋势。2、又通过jmap -heap pid查看堆内存情况,发现Old区Free剩余2M。。3、通过jmap -hsito pid查看哪些类占用的空间多,看到我们自定义的一个类占用很大,因此定位到是我们项目的代码问题。4、通过jma.原创 2021-09-16 10:41:04 · 2789 阅读 · 0 评论 -
GC日志解读,这次别再说看不懂GC日志了
测试环境:机器内存16G,JDK 8,12核CPU测试用例:import java.util.Random;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.LongAdder;/*演示GC日志生成与解读*/public class GCLogAnalysis { private static Random random = new Random(); public static.原创 2021-09-15 10:48:14 · 4496 阅读 · 4 评论 -
GC回收机制及算法
1)引用计数法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,;当引用失效时,计数器的值就减1;任何时刻,计数器为0的对象就是不可能再被使用的。引用计数法,原理简单,实现容易,但是缺点是不能解决对象间循环引用的问题,可能会造成内存泄露。2)可达性分析算法算法思路: 通过一系列"GC Roots"对象作为起始点,开始向下搜索; 搜索所走过和路径称为引用链(R...原创 2018-12-26 21:27:09 · 186 阅读 · 0 评论 -
GC收集器
概述如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。这里讨论的收集器基于JDK 1.7 Update 14之后的HotSpot虚拟机(在这个版本中正式提供了商用的...原创 2018-12-26 21:32:16 · 189 阅读 · 0 评论 -
Shenandoah GC---低延迟垃圾收集器
相关概念历史: Shenandoah GC是由 RedHat公司开发的的新型收集器,14年RedHat把Shenandoah贡献给了OpenJDK。设计目标:实现一种能在任何堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的垃圾收集器。与G1 GC的比较相同点同样基于Region的堆内存布局,同样有着用于存放大对象Humongous Region默认的回收策略也同样是优先处理回收价值最大的Region不同点堆内存管理方面支持并发的整理算法,G1的回收阶段可以是并行的,但.原创 2021-08-09 10:32:28 · 356 阅读 · 0 评论 -
看完这篇,G1垃圾收集器就差不多了~
基础概念定义: Garbage First,垃圾优先,主要面向服务端应用的垃圾收集器。开启命令: -XX:+UseG1GC目标: “停顿时间模型”的收集器:能够支持指定所在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间大概率不超过N毫秒这样的目标。适用场景: 适用于大内存、多CPU的机器。设计理念跳出之前要不收集新生代,要不收集老年代的樊笼,G1面向所有的堆内存任何部分来组成回收集进行回收,衡量标准不再是它属于哪个分代,而是哪块区域中存放的垃圾数量最多,回收效益最大。区域划分Regi.原创 2021-08-04 18:02:02 · 617 阅读 · 0 评论 -
终于把CMS垃圾收集器搞懂了~
相关概念CMS GC的官方名称为“Mostly Concurrenct Mark and Sweep Garbage Collector”(最大-并发-标记-清除-垃圾收集器)。**作用范围:**老年代**算法:**并发标记清除算法。启用参数:-XX:+UseConMarkSweepGC默认回收线程数:(处理器核心数量 + 3)/4Java9之后使用CMS垃圾收集器后,默认年轻代就为ParNew收集器,并且不可更改,同时JDK9之后被标记为不推荐使用,JDK14就被删除了。并发与并行有什么区别?并.原创 2021-07-29 12:19:15 · 775 阅读 · 0 评论