GC(Garbage Collection)垃圾回收机制

垃圾回收机制:
主要三个任务:①分配内存,②确保被引用对象的内存不被错误的回收,③回收不再被引用的对象的内存空间
判断是否是可回收对象:(什么可以回收?)
使用有向图来记录和管理堆内存中的所有对象,通过这个有向图就可以识别哪些对象是“可达的”(有引用变量引用它,就是“可达的”),哪些对象是“不可达的”(没有引用变量引用他就是不可达的),所有“不可达”对象都是可被垃圾回收的。
回收:(如何去回收?)几种常见的垃圾回收算法
1)追踪回收算法
追踪回收算法利用JVM维护的对象引用图,从根节点开始遍历对象的应用图,同时标记遍历到的对象。当遍历结束后,未被标记的对象就是目前已不被使用的对象,可以被回收
2)压缩回收算法
把堆中活动的对象移动到堆中的一端,这样就会在堆中另外一端留出很大一块空闲区域,相当于对堆中的碎片进行了处理。虽然这种方法可以大大简化消除碎片的工作,但是每次处理都会带来性能的损失
3)复制回收算法
把堆分成两个大小相同的区域,在任何时刻,只有其中一个区域被使用,直到这个区域被消耗完为止,此时垃圾回收器会中断程序的执行,通过遍历的方式把所有活动的对象复制到另一个区域中,在复制的过程中,让门是紧挨着不值得,从而可以消除内存碎片。当复制过程结束后程序会接着运行,知道这块区域被使用完,然后再采用上面的方法继续进行垃圾回收。
4)按代回收算法
把堆分成两个或者多个子堆,每一个子堆被视为一代。算法在运行的过程中优先手指那些年幼的对象,如果一个对象经过多次手机仍然“存活”,那么就可以把这个对象转移到高一级的堆里,减少对其扫描的次数。

发布了7 篇原创文章 · 获赞 0 · 访问量 128

猜你喜欢

转载自blog.csdn.net/qq_33581012/article/details/103846240
今日推荐