日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入理解java虚拟机gc_java底层:GC相关——深入理解java虚拟机

發(fā)布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解java虚拟机gc_java底层:GC相关——深入理解java虚拟机 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Java垃圾回收之回收算法

光有垃圾標記算法還不行,JVM還需要有垃圾回收算法來將這些標記為垃圾的對象給釋放回收掉。主要的回收算法有以下幾種:

1.標記 - 清除算法(Mark and Sweep):標記:從根集合進行掃描,對存活的對象進行標記

清除:對堆內(nèi)存從頭到尾進行線性遍歷,回收不可達對象內(nèi)存

缺點

效率問題:標記 和 清除這兩個過程效率都不高。空間問題:標記和清除后會產(chǎn)生大量 不連續(xù)的 內(nèi)存碎片,空間碎片太多 可能會導致 以后在程序運行中 需要分配較大對象時,無法找到足夠連續(xù)內(nèi)存而不得不觸發(fā)一次垃圾回收,觸發(fā)一次之后要是內(nèi)存還不夠,就會連續(xù)觸發(fā),導致OOM

2.復制算法(Copying):將可用的內(nèi)存容量按一定比例劃分為兩塊或多塊,并將其中一塊或兩塊作為對象面,剩余的則作為空閑面

對象在對象面上創(chuàng)建,當對象面的內(nèi)存空間用完時,會將存活的對象從對象面復制到空閑面中,接著清除該對象面中所有的對象

優(yōu)點:解決內(nèi)存碎片化問題,順序分配內(nèi)存,簡單高效。該算法適用于對象存活率低的場景,所以普遍應用在新生代中,因為新生代里的對象存活率通常情況下只有10%左右

3.標記 - 整理算法(Compacting):標記:從根集合進行掃描,對存活的對象進行標記

整理:移動所有存活的對象,且按照內(nèi)存地址次序依次排列,然后將末端內(nèi)存地址以后的內(nèi)存全部回收

優(yōu)點:避免了標記 - 清除算法所帶來的內(nèi)存不連續(xù)性問題,以及不需要像復制算法那樣需要設置兩塊內(nèi)存互換。該算法適用于對象存活率較高的場景,所以普遍應用在老年代中,因為老年代里對象存活率較高

4.分代收集算法(Generational Collector):實際是多種垃圾回收算法的組合拳,該算法對堆內(nèi)存進行進一步的劃分,按照對象生命周期的不同劃分區(qū)域以采用不同的垃圾回收算法。目的是提高JVM的回收效率,也是目前JVM使用的回收算法

一般是把Java堆分為新生代和老年代。在新生代中,每次垃圾回收都有大批的對象死去,只有少量存活,因此我們采用復制算法;而老年代中對象的存活率高,沒有額外空間對他進行分配擔保,就必須采用"標記-清理"或者"標記-整理"算法。

5.Minor GC、Major GC、Full GC的區(qū)別?

堆內(nèi)存劃分為Eden、Survivor、和Tenured/Old空間Minor GC 又稱為新生代GC 指的是發(fā)生在新生代的垃圾回收操作(包括Eden區(qū)和Survivor區(qū))。當JVM無法為一個新的對象分配空間時候,會觸發(fā)Minor GC。因為新生代中大多數(shù)對象的生命周期都很短,因此Minor GC(采用復制算法)非常頻繁,雖然它會觸發(fā)stop-the-world,但是回收速度也比較快。

Major GC清理老年代,出現(xiàn)Major GC通常會出現(xiàn)至少一次Minor GC即大多數(shù)Major GC是由Minor GC觸發(fā)的

Full GC是針對整個堆空間包括新生代、老年代、元空間GC,Full GC不等于Major GC,也不等于Minor GC+Major GC。

總結

以上是生活随笔為你收集整理的深入理解java虚拟机gc_java底层:GC相关——深入理解java虚拟机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。