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

Java学习--JVM(2)

        JVM提供垃圾回收机制,其也是JVM的核心机制,其主要是实现自动回收不再被引用的对象所占用的内存;对内存进行整理,防止内存碎片化;以及对内存分配配进行管理。

        JVM 通过两种主要算法判断对象是否可回收:

                引用计数算法:为每个对象维护一个引用计数器,每被一个对象调用,则计数加1,当计数为 0 时,也就是没有被对象调用的时候,即表示该对象可被回收。然而,这个算法无法解决循环引用问题,即a调用b,b调用a的情况,因此已被主流 JVM 弃用。

                可达性分析算法:从 GCRoots 开始,通过引用链判断对象是否可达。不可达的对象被视为垃圾。GC Roots 包括虚拟机栈中的局部变量、类的静态字段、本地方法栈中的 JNI 引用等,企业是目前主流JVM所使用的算法。

        

JVM的垃圾回收机制根据内存区域的不同采用不同的回收策略:

        堆内存回收:主要针对新生代和老年代采用分代收集算法。新生代使用复制算法,将内存分为Eden区和两个Survivor区,对象首先在Eden区分配,经历Minor GC后存活对象被复制到Survivor区。老年代采用标记-清除或标记-整理算法处理长期存活的对象。

        方法区回收:主要回收废弃的常量和不再使用的类。由于回收条件苛刻且收益较低,通常不频繁执行。需要满足类的所有实例已被回收、类加载器已被回收、类的Class对象没有被引用三个条件才会被回收。

        JVM提供多种垃圾收集器以适应不同场景:

                串行收集器:单线程执行垃圾回收,适用于客户端模式和小内存应用,回收时会产生停顿。

                并行收集器:多线程并行回收,适合吞吐量优先的应用场景,能有效利用多核CPU资源。

                并发标记清除收集器:在应用线程运行同时进行大部分回收工作,显著减少停顿时间,适合响应时间敏感的应用。

        JVM还提供内存分配和调优相关机制:

                对象优先在Eden区分配,大对象直接进入老年代,长期存活的对象通过年龄阈值晋升到老年代。

                通过调节新生代与老年代比例、设置停顿时间目标、调整垃圾回收线程数等参数可优化GC性能。

                使用内存逃逸分析和栈上分配等技术减少堆内存压力,某些情况下对象可直接在栈上分配和回收。

        

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

相关文章:

  • 基于FPGA的IIC控制EEPROM读写(2)
  • AI算法之图像识别与分类
  • 深入理解Java中的Collections.max()方法
  • 贪心算法(排序)
  • GLM(General Language Model,通用语言模型)
  • 2020717零碎写写
  • 学习OpenCV---显示图片
  • Java集合框架中List常见问题
  • Python爬虫实战:Requests与Selenium详解
  • ESLint 完整功能介绍和完整使用示例演示
  • 产品经理如何描述用户故事
  • Rocky Linux 9 源码包安装php7
  • API开发提速新方案:SmartBear API Hub与ReadyAPI虚拟化整合实践
  • 学习日志预告
  • 学习设计模式《十八》——备忘录模式
  • ThinkPHP8 Windows开发全流程:从搭建到上线
  • TASK01【datawhale组队学习】地瓜机器人具身智能概述
  • 设计模式笔记_结构型_装饰器模式
  • 【后端】.NET Core API框架搭建(9) --配置使用Log4Net日志
  • 人工智能之数学基础:概率论和数理统计在机器学习的地位
  • 使用Proxy设计模式来增强类的功能:ToastProxy和DesktopToast的设计关系
  • 力扣119:杨辉三角Ⅱ
  • UGUI 性能优化系列:第一篇——基础优化与资源管理
  • 取消office word中的段落箭头标记
  • 【图像处理基石】如何入门色彩评估?
  • Python暑期学习笔记3
  • Redis:哨兵(Sentinel)
  • 20250717 Ubuntu 挂载远程 Windows 服务器上的硬盘
  • 7.事务操作
  • 自动化技术在造纸行业的应用:EtherCAT转PROFIBUS DP解决方案