JVM GC算法简单介绍

版权声明:www.hsboy.cn [email protected] https://blog.csdn.net/oHongShu1/article/details/88954669

复制算法

将可用内存按容量划分为大小相等的两块(空闲区和活动区),每次只使用其中的一块(活动区)。当这一块的内存用完了,就将还存活着的对象复制到空闲区上面,然后再把活动区这个内存空间清空。这样一来原来的空闲区活动区空间就“颠倒”了,再存储对象就会存到新的活动区内存上,下次执行复制算法时又会再次互换。
复制算法的优势在于效率很高,不会产生内存碎片,但是占用两倍的内存。

标记/清除算法

标记:遍历,找到存活的对象,并给他们打上标记。
清除:在标记之后执行,将之前未标记上的对象清除,然后将之前标记上的对象的标记置空。
缺点:产生内存碎片、效率不高。

标记/整理算法

大体上与标记/清除算法一样,但是它不是用来清除对象而是用来移动对象的,解决标记/清除算法所产生的内存碎片。
缺点:效率不高。

分代收集算法

根据情况不同,选用适合的算法。把Java堆分为新生代、老年代和永久代(java8改为享元空间),这样就可以根据各个年代的特点采用最适当的收集算法。

猜你喜欢

转载自blog.csdn.net/oHongShu1/article/details/88954669
今日推荐