每日一个知识点:什么时候会触发Full GC

简介: 每日一个知识点系列的目的是针对某一个知识点进行概括性总结,可在一分钟内完成知识点的阅读理解
每日一个知识点系列的目的是针对某一个知识点进行概括性总结,可在一分钟内完成知识点的阅读理解。

此处不涉及详细的原理性解读,只作为一种抛砖引玉。

真正的理解一定是你自我研究探索所收获的知识,加入组织带你一起进步成长。

世界上最快的捷径,就是脚踏实地。本文已收录架构技术专栏关注这个喜欢分享的地方,每日获得一个知识点

1. 调用 System.gc()

只是建议虚拟机执行 Full GC,但是虚拟机不一定真正去执行。不建议使用这种方式,而是让虚拟机管理内存。

2. 未指定老年代和新生代大小,堆伸缩时会产生fullgc,所以一定要配置-Xmx、-Xms

3. 老年代空间不足

老年代空间不足的常见场景比如大对象、大数组直接进入老年代、长期存活的对象进入老年代等。

为了避免以上原因引起的 Full GC,应当尽量不要创建过大的对象以及数组。

除此之外,可以通过 -Xmn 虚拟机参数调大新生代的大小,让对象尽量在新生代被回收掉,不进入老年代。

还可以通过 -XX:MaxTenuringThreshold 调大对象进入老年代的年龄,让对象在新生代多存活一段时间。

在执行Full GC后空间仍然不足,则抛出错误:java.lang.OutOfMemoryError: Java heap space

4. JDK 1.7 及以前的(永久代)空间满

在 JDK 1.7 及以前,HotSpot 虚拟机中的方法区是用永久代实现的,永久代中存放的为一些 Class 的信息、常量、静

态变量等数据。

当系统中要加载的类、反射的类和调用的方法较多时,永久代可能会被占满,在未配置为采用 CMS GC 的情况下也

会执行 Full GC。

如果经过 Full GC 仍然回收不了,那么虚拟机会抛出 java.lang.OutOfMemoryError PermGen space

为避免以上原因引起的 Full GC,可采用的方法为增大Perm Gen或转为使用 CMS GC。

5. 空间分配担保失败

空间担保,下面两种情况是空间担保失败:

1、每次晋升的对象的平均大小 > 老年代剩余空间

2、Minor GC后存活的对象超过了老年代剩余空间

注意GC日志中是否有promotion failed和concurrent mode failure两种状况,当出现这两种状况的时候就有可能会触发Full GC。

promotion failed 是在进行 Minor GC时候,survivor space空间放不下只能晋升老年代,而此时老年代也空间不足时发生的。

concurrent mode failure 是在进行CMS GC过程,此时有对象要放入老年代而空间不足造成的,这种情况下会退化使用Serial Old收集器变成单线程的,此时是相当的慢的。

怎么调优

围绕一个点,策略就是尽量把对象在新生代使用回收,减少晋升老年代的几率

开源项目:

相关文章
|
SQL 安全 Java
IoTDB服务安装教程-单机版
IoTDB服务安装教程-单机版
561 0
|
存储 缓存 算法
JVM第三讲:深入理解java虚拟机之垃圾回收算法?CMS垃圾回收的基本流程?对象引用类型?
JVM第三讲:深入理解java虚拟机之垃圾回收算法?CMS垃圾回收的基本流程?对象引用类型?
574 0
|
监控 文件存储 Docker
实现NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
与电脑不同,NAS通常7x24小时运行,便于下载资源,解决BT/PT下载需长时间在线的问题。因此,qBittorrent、Transmission等下载管理工具成为NAS用户的必备应用。通过Docker,用户可在多种NAS设备上快速安装这些工具,并通过局域网IP地址+端口访问。然而,缺乏公网IPv4地址导致远程访问困难,贝锐花生壳提供了解决方案,允许无公网IP情况下通过固定域名远程访问NAS中的下载工具,简化了部署过程,使用户能随时随地控制家中的下载任务。
1072 33
实现NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
|
机器学习/深度学习 监控 算法
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)-1
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)-1
|
存储 运维 监控
深入Linux核心:文件系统与日志解析
【8月更文挑战第20天】
271 2
|
XML 监控 大数据
基于Guava布隆过滤器优化海量字符串去重策略
**Guava Bloom Filter实践:** 在大数据场景下,利用布隆过滤器进行高效字符串去重。Guava提供易用的BloomFilter实现,通过添加Guava依赖,设定预期元素数和误报率来创建过滤器。尽管可能产生误报,但不会漏报,常用于初期快速判断。添加元素,使用`mightContain`查询,若可能存在,再用精确数据结构确认。优化涉及选择哈希函数、调整误报率和避免重复添加。
|
安全 Linux 网络安全
如何在 Debian VPS 上添加、删除和授予用户 sudo 权限
【4月更文挑战第2天】在 Debian 系统中,创建新用户可降低管理风险。新用户默认无管理员权限,可通过 `adduser` 命令添加。要让用户体验 sudo 提升权限,需将其加入 `sudo` 组,如 `usermod -aG sudo newuser`。用户可通过 `ssh` 或 `su -` 切换登录。了解这些基础操作能有效管理和维护服务器。
549 0
|
缓存 前端开发 网络协议
Hugo 网站优化(2): 使用 CDN 加速网站
配置缓存策略, 使用 CDN 加速网站
647 0
Hugo 网站优化(2): 使用 CDN 加速网站
|
Unix Linux Apache
(转)五种开源协议的对比分析BSD, Apache 2.0, GPL,LGPL,MIT
现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses /alphabetical)。
6023 0
|
Java 测试技术
SpringBoot 如何使用 JMH 进行性能测试
SpringBoot 如何使用 JMH 进行性能测试

热门文章

最新文章