GC算法,gc算法有哪些?

XIAO 2020-05-11 16:02:25 java常见问答 7281

对java软件开发行业有一定兴趣的朋友,大概也都听说过java虚拟机吧,其中比较重要的组成部分就不得不说GC算法了,那么你了解的gc算法都有哪些呢?下面跟小编一起来瞧瞧吧。

一、标记清除算法。

标记-清除算法被分为标记和清除两个阶段。此算法首先从根集合进行了扫描,对存活的对象进行标记,标记完成后,再扫描整个空间中没有被标记的对象并进行回收。

二、复制算法。

复制算法把可用内存按容量划分为了大小相等的两块,每次只会使用其中的一块。当这一块的内存用完了,就把还存活着的对象复制到另外一块上面去,然后再把已经使用过的内存空间一次性清理掉。这种算法适用于对象存活率比较低的场景,例如新生代。这样使得每次都是对整个半区来进行内存回收的,内存分配的时候也就不用考虑内存碎片等一些复杂的情况了,只要移动堆

三、标记整理算法。

复制收集算法在对象存活率较高的时候就要进行较多的复制操作了,效率就会变低。更关键的是,如果说不想浪费掉50%的空间,就需要有额外的空间进行分配担保了,用来应对被使用的内存中所有的对象都100%存活的极端情况,所以在老年代一般不能直接选用这种算法。

四、分代收集算法。

对于一个大型的系统来说,当创建的对象和方法变量比较多时,堆内存中的对象就也会比较多,如果逐一分析对象是否该回收,那么一定就会造成效率低下的情况发生。分代收集算法是基于这样一个事实的:不同的对象的生命周期(存活情况)是不一样的,而不同生命周期的对象位于堆中不同的区域,因此对堆内存不同区域采用不同的策略进行回收可以提高 JVM 的执行效率。当代商用虚拟机使用的都是分代收集算法:新生代对象存活率低,我们就采用复制算法;老年代存活率高,就用标记清除算法或者标记整理算法。Java堆内存一般可以分为新生代、老年代和永久代三个模块。

那么以上就是有关GC算法的所有内容了,还想了解更多java常见问答知识,记得关注本站消息,更多精彩内容等你来获取。

推荐阅读:

进程调度的算法是指什么?有何作用?

垃圾收集算法常用的有哪几种?都有什么机制?

java运算符优先级排序正确的是哪些?