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

【jvm】垃圾回收的优点和原理

目录

          • 1. 说明
          • 2. 优点
          • 3. 原理
            • 3.1 发现无用对象
            • 3.2 回收无用对象所占用的内存
          • 4. 回收算法
            • 4.1 标记-清除算法
            • 4.2 复制算法
            • 4.3 标记-整理算法
            • 4.4 分代收集算法

1. 说明
  • 1.JVM(Java虚拟机)垃圾回收是Java语言的一大特性,它自动管理内存,减轻了程序员的负担,并提高了程序的稳定性和安全性。
  • 2.JVM垃圾回收的基本原理包括两个方面:发现无用对象回收无用对象所占用的内存
2. 优点
  • 1.自动内存管理:JVM垃圾回收机制能够自动回收不再使用的对象所占用的内存,无需程序员手动释放内存,从而避免了内存泄漏和悬挂指针等问题。
  • 2.提高编程效率:在没有垃圾回收机制的时候,程序员可能需要花费大量时间来解决内存管理问题。而Java语言通过垃圾回收机制大大缩短了这一时间,提高了编程效率。
  • 3.保护程序完整性:垃圾回收是Java语言安全性策略的一个重要部分。它确保了程序在运行时不会因为内存问题而崩溃或产生不可预测的行为。
  • 4.优化内存使用:垃圾回收机制能够回收不再使用的内存,并将其重新分配给新的对象,从而优化了内存的使用。
3. 原理
3.1 发现无用对象
  • 1.JVM通过对象的可达性分析来判断对象是否仍在使用。
  • 2.可达性分析从根集(root set)开始,根集包括正在执行的Java程序可以访问的引用变量的集合(如局部变量、参数、类变量等)。
  • 3.如果一个对象从根集开始不可达,即没有任何路径可以从根集到达该对象,那么该对象就被认为是无用的,可以被回收。
3.2 回收无用对象所占用的内存
  • 1.一旦确定了无用对象,JVM就会释放这些对象所占用的内存空间,以便其他对象使用。
  • 2.垃圾回收算法有多种,如标记-清除算法复制算法标记-整理算法分代收集算法等。
  • 3.这些算法在回收内存时采用了不同的策略和方法。
4. 回收算法
4.1 标记-清除算法
  • 1.该算法首先标记出所有可达的对象,然后清除未标记的对象所占用的内存。
  • 2.但这种方法会产生内存碎片,即不连续的内存空间。
4.2 复制算法
  • 1.该算法将堆内存分为两个相等的区域,每次只使用其中一个区域。
  • 2.当这个区域的内存用完时,垃圾收集器会将存活的对象复制到另一个区域,并清空已使用的区域。
  • 3.这种方法避免了内存碎片问题,但代价是内存利用率减半。
4.3 标记-整理算法
  • 1.该算法在标记出所有可达对象后,通过移动存活对象来消除内存碎片。
  • 2.它使存活对象连续排列在内存的一端,从而避免了内存碎片问题。
  • 3.这种方法需要移动对象,因此效率相对较低。
4.4 分代收集算法
  • 1.该算法根据对象的存活周期将堆内存划分为几个区域(如新生代和老年代)。
  • 2.新生代中的对象存活时间短,适合使用复制算法进行回收;而老年代中的对象存活时间长,适合使用标记-清除标记-整理算法进行回收。
  • 3.这种方法结合了不同算法的优点,提高了垃圾回收的效率。
http://www.lryc.cn/news/500713.html

相关文章:

  • YOLO系列发展历程:从YOLOv1到YOLO11,目标检测技术的革新与突破
  • 深入浅出:序列化与反序列化的全面解析
  • word实践:正文/标题/表图等的共用模板样式设置
  • Blender中使用BlenderGIS插件快速生成城市建筑模型
  • 【单元测试】单元测试的重要性
  • Codeforces Round 992 (Div. 2)
  • el-table一键选择全部行,切换分页后无法勾选
  • 负载均衡最佳实践及自定义负载均衡器
  • 大模型 LMDeploy 量化部署
  • 算法设计5_分支限界法
  • 2025年人工智能专业可以考哪些证书呢?
  • 仿真技术助力高尔夫球打破传统设计局限,实现球杆强大的功能
  • 微前端架构学习笔记
  • DApp开发:从合约到系统快速上线解决方案
  • react 中 useState 中的 set 方法异步解决
  • UAC2.0 speaker——带反馈端点的 USB speaker(16bit 单声道)
  • docker的简单使用
  • Selenium:强大的 Web 自动化测试工具
  • 设计模式 在PLM系统的应用场景介绍
  • C#请求https提示未能为 SSL/TLS 安全通道建立信任关系
  • 【人工智能】GaussDB数据库技术及应用
  • OpenAI12天 –第3天的实时更新,包括 ChatGPT、Sora、o1 等
  • 删除Yocto中build-x9hp_ms_a12_vemmc_ap2/tmp/work/aarch64-sdrv-linux/package后再编译出错问题
  • 2024三掌柜赠书活动第三十五期:Redis 应用实例
  • 观察者模式的理解和实践
  • 查看Windows系统上的Redis服务器是否设置了密码
  • 认识Java中的异常(半成品)
  • 生成SSH秘钥文件
  • wsl2子系统ubuntu发行版位置迁移步骤
  • 协程设计原理与实现