第③章 垃圾收集器与内存分配策略2

本文深入探讨了Java虚拟机中的垃圾回收器,包括Serial、ParNew、ParallelScavenge、SerialOld、ParallelOld和CMS收集器的特点、适用场景及算法。解析了不同收集器如何在新生代和老年代中搭配使用,以及它们各自的优缺点。

上一篇博客中对于垃圾收集的一些算法做了简单的介绍,那么这篇博客就主要说一下虚拟机的具体垃圾回收器都有哪些,分别是收集那些区域的,怎么搭配的,使用的哪些算法,有哪些优缺点。

 

在开始介绍垃圾收集器之前说几点概念。

一.基本概念

1.枚举根节点,虚拟机不需要遍历整个方法区和与执行上下文去寻找GC ROOTS,而是在OopMap的这个数据结构中存储的就是对象的引用关系。直接通过这个数据结构可以快速的枚举出GC  ROOTS。

2.安全点:就是在GC进行枚举根节点的时候,需要保证引用之间的关系是稳定的,不在变化的,不然的话就会出问题,而安全点就是一个代码中的对象关系处于稳定状态的一个状态标记点。在GC进行的过程中,让所有的线程都跑到安全点在停顿下来,然后去执行GC过程。这里的让线程停顿有两种方式,1.抢先式中断和主动式中断。

什么是抢先式中断和主动式中断?

答:抢先式中断不需要线程的执行代码主动的去配合,在GC发生的时候,首先把所有的线程全部中断,如果发现有些线程中断的地方不在安全点上,就恢复线程让他跑到安全点上面在。这就是抢先式中断,但是现在几乎没有虚拟机的实现采用抢先式中断的方式暂停线程从而响应GC时间.

      主动中断的思想就是当GC需要中断线程的时候,不直接对线程进行操作,仅仅简单的设置一个标志,各个线程执行时会主动的轮询这个标志,发现中断标志位真时就自己中断挂起,轮训标志的地方和安全点是重合的。

 

上述出了安全点,还有安全区域的概念,这个我暂时也没有搞的很清楚,后期在补充吧,下面在介绍虚拟机中的一些垃圾回收器。

正式开始进入垃圾回收器的讲解。

二.垃圾回收器

     Java虚拟机规范中对垃圾收集器应该如何实现没有明确的任何规定,所以不同的厂商,不同版本之间虚拟机之间的垃圾回收器都可能会有很大的差别,并且一般的都会提供参数供用户根据需要自己组合出各个年代的收集器。这里主要讨论的是JDK1.7的虚拟机.

上图展示了7中作用于不同分代的收集器,如果两个收集器之间存在连线,就说明他们可以搭配使用。虚拟机所处的位置,则表示他们是属于新生代还是老年代的的收集器。下面就来逐个简答的介绍一下吧。

1.Serial收集器

  • 特点:是最基本、发展历史最悠久的收集器。这是一个单线程收集器。但它的“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束
  • 应用年代:新生代
  • 采用算法:复制算法
  • 应用:是虚拟机运行在Client模式下的默认新生代收集器。
  • 优势:简单而高效(与其他收集器的单线程比),对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程效率。
  • 缺点:Stop the world!

2.ParNew

  • 特点:ParNew收集器其实就是Serial收集器的多线程版本
  • 应用年代:新生代
  • 采用算法:复制算法
  • 应用:CPU较多,许多的Server模式下的虚拟机首选新生代的收集器.
  • 优势:除了Serial收集器外,目前只有它能与CMS收集器配合工作
  • 缺点:在单CPU环境,表现甚至不如Serial

3.Parallel Scavenge

  • 特点:Parallel Scavenge收集器的目标是达到一个可控制的吞吐量。(吞吐量 = 运行用户代码时间 + 垃圾收集时间)。他的关注点是达到一个可控制的吞吐量。还可以根据当前系统的运行情况收集性能监测信息,动态调整这些参数以提供最合适的停顿时间或者最大吞吐量。
  • 应用年代:新生代,适合在后台运算而不需要太多交互任务的情况。(意味着CPU使用率很高,不停执行用户线程)
  • 采用算法:复制算法
  • 优势:同特点

怎么理解关注点是吞吐量而不是用户线程停顿时间呢?因为如果要用户线程停顿时间短,则是要牺牲吞吐量来实现的,即CUP更多的去执行垃圾回收线程,从而很快的进行回收,但是用户线程执行时间减少,即吞吐量下降。

他有很多的可配置参数,比如-XX MaxGCPauseMillis(GC最大花费时间),-XX GCTimeRatio(吞吐量大小)等等一系列参数。他可以设置成自动调整的参数。即GC的自适应调节策略

 

4.Serial Old收集器

  • 特点:Serial 的老年版本
  • 应用年代:老年代
  • 采用算法:标记-整理
  • 应用:与Parallel Scavenge收集器搭配使用;作为CMS收集器的后备预案,在并发收集发生Conurrent Mode Failure 使用。
  • 优势:主要的意义也是给Clinet下的老年代使用。

5.Parallel Old

  • 特点:Parallel Old是Parallel Scavenge收集器的老年代版本
  • 应用年代:老年代
  • 采用算法:标记-整理
  • 应用:注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel。

6.CMS收集器(重点)

  • 特点:是HotSpot虚拟机中第一款真正意义上的并发收集器,以获取最短回收停顿时间为目标的收集器。它第一次实现了让垃圾收集线程与用户线程同时工作,。
  • 应用年代:老年代
  • 采用算法:标记-清除
  • 应用场景:大部分集中在互联网站或者B/S系统的服务端上的 Java 应用
  • 优势:停顿时间短。

CMS和G1收集器后面详细研究,现在状态不佳,无法深入学习。。

 

 

 

 

 

 

 

 

【无线传感器】使用 MATLAB和 XBee连续监控温度传感器无线网络研究(Matlab代码实现)内容概要:本文围绕使用MATLAB和XBee技术实现温度传感器无线网络的连续监控展开研究,介绍了如何构建无线传感网络系统,并利用MATLAB进行数据采集、处理可视化分析。系统通过XBee模块实现传感器节点间的无线通信,实时传输温度数据至主机,MATLAB负责接收并处理数据,实现对环境温度的动态监测。文中详细阐述了硬件连接、通信协议配置、数据解析及软件编程实现过程,并提供了完整的MATLAB代码示例,便于读者复现和应用。该方案具有良好的扩展性和实用性,适用于远程环境监测场景。; 适合人群:具备一定MATLAB编程基础和无线通信基础知识的高校学生、科研人员及工程技术人员,尤其适合从事物联网、传感器网络相关项目开发的初学者中级开发者。; 使用场景及目标:①实现基于XBee的无线温度传感网络搭建;②掌握MATLAB无线模块的数据通信方法;③完成实时数据采集、处理可视化;④为环境监测、工业测控等实际应用场景提供技术参考。; 阅读建议:建议读者结合文中提供的MATLAB代码硬件连接图进行实践操作,先从简单的点对点通信入手,逐步扩展到多节点网络,同时可进一步探索数据滤波、异常检测、远程报警等功能的集成。
内容概要:本文系统讲解了边缘AI模型部署优化的完整流程,涵盖核心挑战(算力、功耗、实时性、资源限制)设计原则,详细对比主流边缘AI芯片平台(如ESP32-S3、RK3588、Jetson系列、Coral等)的性能参数适用场景,并以RK3588部署YOLOv8为例,演示从PyTorch模型导出、ONNX转换、RKNN量化到Tengine推理的全流程。文章重点介绍多维度优化策略,包括模型轻量化(结构选择、输入尺寸调整)、量化(INT8/FP16)、剪枝蒸馏、算子融合、批处理、硬件加速预处理及DVFS动态调频等,显著提升帧率并降低功耗。通过三个实战案例验证优化效果,最后提供常见问题解决方案未来技术趋势。; 适合人群:具备一定AI模型开发经验的工程师,尤其是从事边缘计算、嵌入式AI、计算机视觉应用研发的技术人员,工作年限建议1-5年;熟悉Python、C++及深度学习框架(如PyTorch、TensorFlow)者更佳。; 使用场景及目标:①在资源受限的边缘设备上高效部署AI模型;②实现高帧率低功耗的双重优化目标;③掌握从芯片选型、模型转换到系统级调优的全链路能力;④解决实际部署中的精度损失、内存溢出、NPU利用率低等问题。; 阅读建议:建议结合文中提供的代码实例工具链(如RKNN Toolkit、Tengine、TensorRT)动手实践,重点关注量化校准、模型压缩硬件协同优化环节,同时参考选型表格匹配具体应用场景,并利用功耗监测工具进行闭环调优。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值