当前位置: 首页 > article >正文

【jvm】Full GC

目录

          • 1. 说明
          • 2. 触发条件
          • 3. 优化
          • 4. 注意事项

1. 说明
  • 1.Full GC(Full Garbage Collection)是Java垃圾回收过程中最重要且最昂贵的一种操作。
  • 2.Full GC涉及对整个堆内存(包括年轻代老年代)的垃圾回收。
  • 3.当Full GC发生时,JVM会暂停所有的应用程序线程,直到垃圾回收完成,这种暂停被称为“Stop-the-World”(STW)事件。
  • 4.由于Full GC需要对整个堆进行扫描和清理,因此它会比只回收年轻代的垃圾回收(Minor GC)耗费更多的时间和资源。
2. 触发条件
  • 1.老年代空间不足:当老年代空间不足以容纳新创建的对象或被提升的对象时,会触发Full GC。
  • 2.永久代/元空间不足:永久代/元空间主要用于存储类的元数据和静态信息,因此类加载过多或类定义过多时,可能会导致Full GC。
  • 3.手动执行GC命令:使用System.gc()方法或调用Runtime.getRuntime().gc()方法可以手动触发Full GC,但这是一个建议,JVM可以选择执行。
  • 4.年代晋升失败:如对象从年轻代晋升到老年代时,老年代没有足够的空间容纳这些对象,也会触发Full GC。
  • 5.CMS的Concurrent-Mode-Failure:在使用CMS(Concurrent Mark-Sweep)垃圾收集器时,如果在Minor GC之后没有足够的空间在老年代容纳晋升对象,会触发Full GC。
  • 6.G1垃圾收集器的特殊情况:在使用G1垃圾收集器时,如果在年轻代GC后无法找到足够的连续空闲内存空间来放置所有存活对象,也会触发Full GC。
3. 优化
  • 1.调整堆的大小:通过增加老年代的大小或减少年轻代的大小,可以减少老年代空间不足而触发的Full GC。同时,设置合理的初始堆大小和最大堆大小,使得JVM启动时堆内存就达到适合的大小,减少堆扩展时可能的Full GC。
  • 2.使用合适的垃圾收集器:根据应用程序的特点选择适合的垃圾收集器可以更好地平衡内存占用和性能。例如,对于需要低延迟的应用程序,可以选择使用CMS或G1垃圾收集器。
  • 3.减少对象产生:通过对象的复用、使用对象池等方式减少对象的产生,可以降低GC的负担,从而减少Full GC的发生。
  • 4.分析Full GC日志:仔细分析Full GC日志可以帮助找出导致Full GC的根本原因。通过分析日志中的堆内存使用情况、垃圾收集时间和回收的内存量等信息,可以找到潜在的问题并进行相应的优化。
4. 注意事项
  • 1.避免频繁调用System.gc():在代码中尽量避免频繁调用System.gc()方法,因为这可能会引起不必要的Full GC。
  • 2.监控内存使用情况:使用JVM提供的监控工具(如jstat、visualvm等)监控内存使用情况,及时发现并处理内存泄漏等问题。
  • 3.选择合适的JVM参数:根据应用程序的需求选择合适的JVM参数,如堆大小、垃圾收集器类型等,以优化性能。

http://www.kler.cn/a/378849.html

相关文章:

  • [ shell 脚本实战篇 ] 编写恶意程序实现需求(恶意程序A监测特定目录B出现特定文件C执行恶意操作D-windows)
  • 推荐一款功能强大的数据库开发管理工具:SQLite Expert Pro
  • 第三十三章:docker 启动mysql web管理工具- MyWebSQL
  • 【综合算法学习】(第十五篇)
  • 明日周刊-第26期
  • 它真能替代Express?tinyhttp用速度和轻量征服开发者
  • 网络层3——IP数据报转发的过程
  • 请你谈一谈闭包?详细解释闭包的概念、形成原因、作用及与作用域、垃圾回收机制的关系
  • 深度学习(十):伦理与社会影响的深度剖析(10/10)
  • 最简单方式SSH连接局域网中另一台电脑的WSL2
  • java并发编程-volatile的作用
  • 搜索引擎语法大全(Google、bing、baidu)
  • scala Map集合
  • MySQL45讲 第十二讲 为什么我的MySQL会“抖”一下?
  • 大数据新视界 -- 大数据大厂之提升 Impala 查询效率:索引优化的秘籍大揭秘(上)(3/30)
  • 「iOS」——知乎日报一二周总结
  • STL学习-关联容器-pair数对
  • 新老项目不同node版本,使用nvm控制node版本切换(mac、window)
  • Excel菜单选项无法点击?两种原因及解决方法全解析
  • 《Python 练习一百题:提升编程技能的宝藏》
  • 重生之我在Java世界------学工厂设计模式
  • Transformer 架构简单理解;GPT-3.5 的架构,向量长度为 :12288;Transformer架构改进:BERT和GPT
  • git创建一个公共子模块用于不同的项目共享这一个子模块
  • JWT-混淆算法
  • 鸿蒙HarmonyOS应用开发者(基础+高级)认证
  • uniapp下载文件的方案,包括H5,App方案解决办法