java语言创建完对象后,自己不用负责释放自己创建的对象,因为后台有垃圾回收进行帮你处理这个事情,使我们省了不少事情,但问题是它怎么知道一个对象是垃圾,该清理了,缺有着不同的实现方式和各有优缺点,下面列举了一些不同的实现
1.引用计数收集器:创建、引用时+1,超过生命周期-1。(早期)
优点:快速,交织在程序中。对不能被长时间打断的程序有利。
缺点:无法检测死循环
2.跟踪收集器:追踪从根节点开始的对象引用图,“标记并清除”
3.压缩收集器:压缩和拷贝。将活动对象越过空闲区域滑动到堆的另一端,使另一段有大的连续空闲区。
对象-句柄-堆
优点:堆中对象移动后只用跟新句柄表引用,无需更新程序本身的引用
缺点:对象访问带来了性能损失
4.拷贝收集器:将所有活动对象移动到一个新的区域,“停止并拷贝”
优点:从根对象遍历的过程中就可以同时拷贝,无需标记
缺点:需要双倍的内存空间,效率低,长生命周期对象来回拷贝
5.按代收集的收集器:按寿命分组,2个或更多子堆。最年幼的代频繁垃圾收集,多次手机仍然存活则移动到高代中
优点:提高效率
6.自适应收集器:监控堆使用。按照具体情况自动调整策略或者分子堆使用不同策略
二、收集完就完事了吗
不听的创建,不听的回收,会形成很多内存碎片,不连续,给以后创建带来很大的影响,所以还有一个转移搬运的过程,就像操作系统的碎片整理一样。
1.引用计数收集器:创建、引用时+1,超过生命周期-1。(早期)
优点:快速,交织在程序中。对不能被长时间打断的程序有利。
缺点:无法检测死循环
2.跟踪收集器:追踪从根节点开始的对象引用图,“标记并清除”
3.压缩收集器:压缩和拷贝。将活动对象越过空闲区域滑动到堆的另一端,使另一段有大的连续空闲区。
对象-句柄-堆
优点:堆中对象移动后只用跟新句柄表引用,无需更新程序本身的引用
缺点:对象访问带来了性能损失
4.拷贝收集器:将所有活动对象移动到一个新的区域,“停止并拷贝”
优点:从根对象遍历的过程中就可以同时拷贝,无需标记
缺点:需要双倍的内存空间,效率低,长生命周期对象来回拷贝
5.按代收集的收集器:按寿命分组,2个或更多子堆。最年幼的代频繁垃圾收集,多次手机仍然存活则移动到高代中
优点:提高效率
6.自适应收集器:监控堆使用。按照具体情况自动调整策略或者分子堆使用不同策略
二、收集完就完事了吗
不听的创建,不听的回收,会形成很多内存碎片,不连续,给以后创建带来很大的影响,所以还有一个转移搬运的过程,就像操作系统的碎片整理一样。