Java垃圾回收器的工作原理

本文深入探讨了Java垃圾回收器的工作原理,解释了其如何提高对象创建速度,以及老年代和新生代中采用的不同垃圾回收策略。通过对比引用计数法、停止-复制和标记-清扫等机制,阐述了Java虚拟机自适应选择回收策略的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上课,老师照本宣科,实在难以理解,干脆就看书包里的Java书,正好看了Java的垃圾回收器是如何工作的,觉得有必要记录一下。

参考于 Java编程思想第四版(Thinking in Java)

  老年代中一般使用标记压缩 

  新生代中一般使用copy,所以有一个eden和两个survivor。

1.垃圾回收器对于提高对象的创建速度,有明显的效果

  问题来了,垃圾回收是释放对象,而关创建对象什么事?

  首先了解一下Java是如何在堆上分配内存的,Java使用“堆指针”,每分配一个对象,指针就往后移一位,类似于堆栈,这样就达到了高速创建对象,但这样的方法带来了弊端,在堆栈中还可以出栈来释放,在堆里你没有出栈啊,不一会堆(内存)就满了,就要放磁盘上去,非常浪费时间。那么这时候垃圾回收装置就介入了,他帮助我们回收空间,并处理因为释放对象而产生的碎片(因为有的对象可能比较小,释放后就空了一块内存,比如大小为5,但是其他对象的大小都在10以上,那么这块内存就是碎片了,别的对象根本就放不进去)。

  有了垃圾回收器,所以java才能使用“堆指针”来创建对象,所以说垃圾回收器对创建速度有明显的效果 

2.Java垃圾回收器的具体机制

  2.1 引用计数法

    就是每个对象都有一个标志,每次被引用1次就加1,如果引用为0,那么就会去回收,但会有特殊情况,如果两个对象在堆里,互相引用,那么使用这种方法就失效了,所以java中不用这种方法。

  2.2停止-复制(stop-and-copy)  和  标记-清扫(mark-and-sweep)

    这两个思想是相同的,不同具体实现略有不同。这两种方式需要程序暂停才能工作。

    首先从堆栈或静态存储区开始,遍历所有的引用,根据引用找到对象,再遍历查看找到对象中的引用,依次下去,这样就避免的互相引用的问题,因为如果互相引用,那么在堆栈中根本就不会出现

    停止-复制就是在开辟一个堆,然后把“活”的引用复制到堆中,不过开辟堆实在太浪费,感觉就在把一个堆划分成不同的块,在块中复制。

    标记-清扫就是“活”的对象给个标记,先找出打好标记,然后在回收。

    Java虚拟机可以自适应切换两种方法,因为如果在很少需要回收的对象时,如果还使用停止-复制未免也太浪费了,如果一直用标记-清扫,那么就会产生很多的碎片,有很多碎片的时候就用停止-复制,因为复制到另一个块中,程序自然会去把对象排列好。

 

转载于:https://www.cnblogs.com/dddyyy/p/9895896.html

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值