什么是Full GC?触发Full GC的条件?如何避免Full GC?

news2024/7/7 16:12:30

Full GC是一种垃圾回收机制,用于回收整个堆内存中的所有的未使用的对象,包括年轻代、老年代和永久代(元空间)中的对象。

Full GC会暂停除了GC线程外的所有的线程,这种暂停时间相对较长,对系统性能影响较大

触发Full GC的条件

1.显式调用system.gc(),此方法只是建议系统执行Full GC,提高Full GC执行的概率,但不是必定会执行。

2.老年代空间不足。

对象进入老年代的条件:

  1. 对象年龄超过15岁(默认)【-XX:MaxTenuringThreshold】
  2. 动态年龄判断:Survivor区的对象年龄从小到大进行累加,当累加到X年龄(某个年龄)时占用空间的总和大于50%(可以使用-XX:TargetSurvivorRatio=?来设置保留多少空闲空间,默认值是50),那么比X年龄大的对象都会晋升到老年代
  3. 大对象直接进入老年代(Serial和ParNew收集器)(默认1M)【-XX:PretenureSizeThreshold】
  4. 空间担保机制

3.Eden区满了,触发Minor GC后,存活的对象无法全部晋升到Survivor区,会由老年代担保机制将剩余的对象直接放入老年代,如果老年代也放不下,就会触发Full GC

4.元空间内存不足。

5.CMS垃圾处理器在并发标记阶段出现“Concurrent Mode Failure”时,会触发一次Full GC。

如何避免Full GC

1.调整堆内存大小: 如果堆内存设置得太小,容易导致频繁的垃圾回收,特别是Full GC。增大堆内存可以减少垃圾回收的频率。可以通过 -Xms 和 -Xmx 参数分别设置初始堆大小和最大堆大小。

java -Xms512m -Xmx1024m -jar YourApplication.jar

2.合理设置新生代和老年代的比例: 年轻代存活对象晋升到老年代时会触发Full GC,合理设置新生代和老年代的比例可以影响对象晋升的速度。可以通过 -XX:NewRatio 参数来调整新生代和老年代的比例。

java -XX:NewRatio=2 -jar YourApplication.jar

3.选择合适的垃圾回收器: 根据应用程序的特性选择合适的垃圾回收器。不同的垃圾回收器有不同的特点,比如CMS(Concurrent Mark-Sweep)和G1(Garbage-First)是以减小停顿时间为目标的回收器,适用于对响应时间敏感的应用。

java -XX:+UseConcMarkSweepGC -jar YourApplication.jar

4.调整新生代的大小: 通过调整新生代的大小,可以影响对象在年轻代的存活时间,从而影响晋升到老年代的速度。可以使用参数 -Xmn 来设置新生代的大小。

java -Xmn256m -jar YourApplication.jar

5.避免过度使用Finalizer: 使用 finalize 方法可能导致对象在垃圾回收时的额外开销。尽量避免过度依赖 finalize 方法。

6.检查内存泄漏: 内存泄漏可能导致堆内存的不断增加,最终导致Full GC。使用内存分析工具(如VisualVM、MAT等)来检查和解决潜在的内存泄漏问题。

7.监控和调优: 定期监控应用程序的垃圾回收情况,通过日志或监控工具(如VisualVM、JConsole等)来分析GC日志,找到GC发生的原因,并根据实际情况进行调优。

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

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

相关文章

图书借阅小程序论文(设计)开题报告

一、课题的背景和意义 近些年来,随着移动互联网巅峰时期的来临,互联网产业逐渐趋于“小、轻、微”的方向发展,符合轻应用时代特点的各类技术受到了不同领域的广泛关注。在诸多产品中,被誉为“运行着程序的网站”之名的微信小程序…

开始尝试从0写一个项目--前端(一)

基础项目构建 创建VUE初始工程 确保自己下载了node.js和npm node -v //查看node.js的版本 npm -v //查看npm的版本 npm i vue/cli -g //安装VUE CLI 创建 以管理员身份运行 输入:vue ui 就会进入 点击创建 自定义项目名字,选择npm管理 结…

什么是多态(Polymorphism)

什么是多态(Polymorphism) 1、多态的基本概念2、多态的实现方式2.1 方法重载(Overloading)2.2 方法重写(Overriding)2.3 接口和抽象类 3、为什么要使用多态?4、结论 💖The Begin&…

启明智显Model3A芯片方案7寸高清触摸屏ZX7D00CM21S:开箱、设置与实操全攻略指南

一、背景 本指南将详细介绍启明智显的Model3A芯片方案下的7寸高清触摸屏ZX7D00CM21S的开箱步骤、基础设置以及实操应用。无论您是电子爱好者、开发者还是工程师,这份指南都能助您快速上手并充分利用这款触摸屏的各项功能。 二、硬件介绍 ZX7D00CM21S 7寸高清触摸屏是…

500mA、低压差、低噪声、超快、无需旁路电容的CMOS LDO稳压器RT9013

一般描述 RT9013 SOT23-5封装的外观和丝印 RT9013 是一款高性能的 500mA LDO 稳压器,具有极高的 PSRR 和超低压差。非常适合具有苛刻性能和空间要求的便携式射频和无线应用。 RT9013的静态电流低至25μA,进一步延长了电池的使用寿命。RT9013 也适用于低…

kafka的工作原理与常见问题

定义 kafka是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域 消息队列工作原理 kafka的组成结构 kafka的基础架构主要有broker、生产者、消费者组构成,还包括zookeeper. 生产者负责发送…

【Android源码】Gerrit安装

前言 如果你打开 https://android.googlesource.com/platform/manifest,就会发现,google官方管理Android源码,使用的是Gerrit。Android系统源码是非常大的,用Git肯定是不适合。对于大型项目,得用Gerrit,今…

小龙虾优化24种机器学习多输入单输出回归|时序预测模型

小龙虾优化24种机器学习多输入单输出回归|时序预测模型 文章目录 小龙虾优化24种机器学习多输入单输出回归|时序预测模型前言一、小龙虾优化基本原理二、优化机器学习模型1.COA-CNN-BiGRU-Attention回归模型2.基于小龙虾优化支持向量机的数据回归预测Matlab程序COA-SVM 多特征输…

Web应用防火墙用在哪些场景?

WAF是Web Application Firewall的缩写,翻译为“Web应用防火墙”是一种网络安全设备或服务,用于保护Web应用程序免受各种网络攻击和漏洞的影响。 WAF特别设计用于识别和阻止特定于Web应用程序的攻击,例如SQL注入、跨站脚本(XSS)、跨站请求伪造…

014-GeoGebra基础篇-快速解决滑动条的角度无法输入问题

有客户反馈,他的Geogebra一直有个bug,那就是输入角度最大值时总不按照他设定的展示,快被气炸了~ 目录 一、问题复现(1)插入一个滑动条(2)选择Angle(3)输入90,…

MySQL学习(8):约束

1.什么是约束 约束是作用于表中字段上的规则,以限制表中数据,保证数据的正确性、有效性、完整性 约束分为以下几种: not null非空约束限制该字段的数据不能为nullunique唯一约束保证该字段的所有数据都是唯一、不重复的primary key主键约束…

linux中与网络有关的命令

本文的命令总览 ifconfig命令 在 Linux 系统中,ifconfig 命令用于配置和显示网络接口的信息,包括 IP 地址、MAC 地址、网络状态等。同时我们也可以利用ifconfig 命令设置网络接口对应的ip地址,子网掩码等 当你使用 ifconfig 命令时&#xf…

Oracle数据库中RETURNING子句

RETURNING子句允许您检索插入、删除或更新所修改的列(以及基于列的表达式)的值。如果不使用RETURNING,则必须在DML语句完成后运行SELECT语句,才能获得更改列的值。因此,RETURNING有助于避免再次往返数据库,…

SpringBoot 启动流程一

SpringBoot启动流程一 我们首先创建一个新的springboot工程 我们不添加任何依赖 查看一下pom文件 我们创建一个文本文档 记录我们的工作流程 我们需要的是通过打断点实现 我们首先看一下启动响应类 package com.bigdata1421.start_up;import org.springframework.boot.Spr…

Element中的日期时间选择器DateTimePicker和级联选择器Cascader

简述:在Element UI框架中,Cascader(级联选择器)和DateTimePicker(日期时间选择器)是两个非常实用且常用的组件,它们分别用于日期选择和多层级选择,提供了丰富的交互体验和便捷的数据…

Chart.js四个示例

示例代码在图片后面&#xff0c;点赞加关注&#xff0c;谢谢 条形图 雷达图 折线图 圆环图 完整例子代码 具体代码在干什么看粗体加重的注释 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <me…

TensorFlow与PyTorch的对比与选择(Python深度学习)

目录 一、TensorFlow与PyTorch概述 1.1 TensorFlow 1.2 PyTorch 二、性能对比 2.1 静态图与动态图 2.2 分布式计算 三、易用性与灵活性 3.1 易用性 3.2 灵活性 四、社区支持 4.1 TensorFlow 4.2 PyTorch 五、实际案例与代码示例 5.1 TensorFlow案例&#xff1a;手…

关于 lvds 屏幕的一些知识

网上的截图&#xff1a; lvds的 通道。 lvds 的协议 关于 sync 模式与 de 模式&#xff1a; ------------------------------------------------------------------------------------------------------------------ 芯片的数据手册的看法。 这个手册 &#xff0c;就指明了…

【Unity学习笔记】A*寻路算法

文章目录 图寻路算法BFS广度优先算法DFS深度优先贪心算法 引入权重Dijkstra算法 A*算法C#实现步骤 Unity中的A*算法A*优化建议 图 图的知识盘点 pathfinding 作为一名计算机专业的学生&#xff0c;对于图这种数据结构也是烂熟于心了。图是一种包含了多个结点的数据结构&…