Java优化之GC

白色玫瑰 程序猿

时间: 2023-07-11 阅读: 1 字数:1619

{}
一般我们不必关心Java的垃圾回收问题,JVM会帮我们处理;但是如果对JVM的GC机制不了解,可能会写出很影响性能的代码        在此之前,我们需要了解到JVM垃圾的回收的时候,有可能出现的一种情况:stop-the-world,即JVM判定有大量垃圾需要回收,除了GC线程外,其他线程均处于阻塞状态,知道GC任务完成。所以针对GC的优化工作就是主要是减少stop-the-world触发次数(...

一般我们不必关心Java的垃圾回收问题,JVM会帮我们处理;但是如果对JVM的GC机制不了解,可能会写出很影响性能的代码

  在此之前,我们需要了解到JVM垃圾的回收的时候,有可能出现的一种情况:stop-the-world,即JVM判定有大量垃圾需要回收,除了GC线程外,其他线程均处于阻塞状态,知道GC任务完成。所以针对GC的优化工作就是主要是减少stop-the-world触发次数(一般来说就是Full GC)。


  JVM的垃圾回收,针对的是堆内存空间和方法区,而栈内存空间的数据会在超出作用域后JVM自动清理,不归GC管理。



  通常来说,堆内存空间被大致分为


        年轻代:对象被创建后被放入老年代,大部分对象会在这个区域保存直到销毁,但是GC多次运行后依然存在的对象会根据存活时间,依次移到老年代



        老年代: 所占用的空间要比年轻代大得多



        在年轻代的清理称为MinorGC,年老代称为Full GC



        GC对于年轻代 老年代 区域的扫描频率是不一样的,相对来说老年代扫描频率低很多



  一般来说GC通过一下的条件判断是否回收



  1.对象没有引用



  2.作用域发生未捕获的异常



  3.程序在作用域内正常执行完毕



  4.程序意外停止(如 kill -9 线程)



  5.执行System.exit()



  当然我们把杜对象显式的=null 后也是可以的



  注意以上情况只是被标记为可回收,但具体什么时间回收有JVM判断







  通常的优化做法是设置年轻代转年老代的转换比例/年龄阈值

=============================================

漏掉了持久区(方法区)的GC回收介绍

必须满足以下三个条件

1.所有实例都被回收

2.加载该类的类加载器被回收

3.Class对象无法通过任何对象被访问

原文地址:https://blog.csdn.net/xsf1840/article/details/79979200?ops_request_misc=&request_id=42e68fa23fde409eb981631ce130651a&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~koosearch~default-9-79979200-null-null.142^v88^insert_down28v1,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/24c376512b7747d7b8180f2fda9a5b84

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号