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

java垃圾回收机制介绍

394707aa6ec64c3c8af729e24ff91ca8.jpgJava垃圾回收机制(Garbage Collection, GC)是Java编程语言中的一项重要特性,它自动管理内存,释放不再使用的对象

 

 

  1. 堆(Heap):

 

      • Java虚拟机(JVM)中用于存储对象实例的内存区域。

 

      • 垃圾回收主要发生在堆上。

 

  2. 年轻代(Young Generation):

 

      • 堆的一部分,用于存放新生成的对象。

 

      • 通常分为Eden区和两个Survivor区(S0和S1),通过复制算法进行垃圾回收。

 

  3. 老年代(Old Generation/Tenured Generation):

 

      • 堆的另一部分,用于存放经过多次年轻代GC后仍然存活的对象。

 

      • 通常使用标记-清除或标记-整理算法进行垃圾回收。

 

  4. 永久代(PermGen)/元空间(Metaspace)(Java 8及以后):

 

      • 在Java 8之前,永久代用于存储类的元数据信息(如类名、访问修饰符、常量池等)。

 

      • Java 8及以后,永久代被元空间取代,元空间使用本地内存(Native Memory)而不是堆内存来存储类的元数据信息。

 

  5. 垃圾回收器(Garbage Collector, GC):

 

      • 实现垃圾回收算法的组件,负责自动回收不再使用的内存。

 

      • Java提供了多种垃圾回收器,如Serial GC、Parallel GC、CMS GC、G1 GC等。

 

  6. 引用计数(Reference Counting):

 

      • 一种简单的垃圾回收算法,通过维护每个对象的引用计数来判断对象是否可以被回收。

 

      • 但由于无法解决循环引用问题,在Java中并未采用。

 

  7. 可达性分析算法(Reachability Analysis Algorithm):

 

      • Java采用的垃圾回收判断算法,通过从根节点(GC Roots)开始遍历对象图,判断对象是否可达。

 

      • 不可达的对象被认为是垃圾,可以被回收。

 

  8. 标记-清除(Mark-Sweep):

 

      • 一种垃圾回收算法,首先标记所有可达的对象,然后清除所有未标记的对象。

 

      • 但会导致内存碎片问题。

 

  9. 标记-整理(Mark-Compact):

 

      • 在标记-清除的基础上,对存活的对象进行整理,消除内存碎片。

 

  10. 复制算法(Copying Algorithm):

 

      • 将内存分为两块,每次只使用其中一块分配对象。

 

      • 当这块内存用完时,复制存活的对象到另一块内存,并清空当前块。

 

      • 年轻代通常使用这种算法。

 

  11. 分代回收(Generational Garbage Collection):

 

      • 根据对象的生命周期长短,将堆内存划分为不同的代(年轻代、老年代),并根据代的特性采用不同的垃圾回收策略。

 

  12. 并发(Concurrent)/并行(Parallel)垃圾回收:

 

      • 并发垃圾回收:垃圾回收线程与应用线程同时运行,减少停顿时间。

 

      • 并行垃圾回收:使用多个垃圾回收线程同时执行垃圾回收任

http://www.lryc.cn/news/496586.html

相关文章:

  • SpringMVC跨域问题解决方案
  • 【语音识别】Zipformer
  • vue+uniapp+echarts的使用(H5环境下echarts)
  • 【Python网络爬虫笔记】7-网络爬虫的搜索工具re模块
  • 为什么选择 React Native 作为跨端方案
  • 服务器与普通电脑有什么区别?
  • Oracle 12c Data Guard 环境中的 GAP 修复方法
  • 力扣 三角dp
  • SQL基础语法全解析(上篇)
  • 【笔记】Linux服务器端使用百度网盘
  • UEFI Spec 学习笔记---3 - Boot Manager(3)
  • ATTCK红队评估实战靶场(四)
  • Android Studio 历史版本下载
  • 微信小程序px和rpx单位互转方法
  • Vercel 部署与管理指南:简化前端应用的自动化部署流程
  • Java11使用JVM同一日志框架启用日志记录
  • onlyoffice实现文档比对(Beta版)-纯文字比对(非OCR)
  • JS querySelector方法的优点
  • 利用获取商品详情API:item_get可以获取到淘宝商品详情的哪些数据?
  • 【大数据学习 | 面经】Spark 3.x 中的AQE(自适应查询执行)
  • [Vue]Vue-router
  • 【HarmonyOS】鸿蒙应用使用lottie动画
  • 1.使用docker 部署redis Cluster模式 集群3主3从
  • vue基础之8:computed对比watch
  • Luban数据插件的用法
  • 指针(上)
  • 张伟楠动手学强化学习笔记|第一讲(上)
  • python脚本:Word文档批量转PDF格式
  • 性能测试常见面试问题和答案
  • uniapp进阶技巧:如何优雅地封装request实例