GC算法https://www.cnblogs.com/smyhvae/p/4744233.html
?引用計數(shù)法(無法解決循環(huán)引用的問題爸业,不被java采納)
??? 根搜索算法
??? 現(xiàn)代虛擬機中的垃圾搜集算法:
標記-清除
復制算法(新生代)
標記-壓縮(老年代)
??? 分代收集
Stop-The-World
垃圾回收器https://www.cnblogs.com/smyhvae/p/4810168.html
stop the world系列
? ??Serial收集器:(串行收集器)
? ??ParNew收集器:Serial收集器的多線程版本(使用多條線程進行GC)
? ??ParNew?Scanvenge收集器?類似ParNew秧均,但更加關注吞吐量铜跑。目標是:達到一個可控制吞吐量的收集器寸士。
? ??G1收集器:是當今收集器發(fā)展的最前言成果之一权悟,jdk1.7锌订,商用程度眨业。對垃圾回收進行了劃分優(yōu)先級的操作急膀,這種有優(yōu)先級的區(qū)域回收方式保證了它的高效率。
牛逼系列
? ??CMS收集器:(老年代收集器)并發(fā)標記清除
? ??初始標記和重新標記時龄捡,需要stop the world卓嫂。整個過程中耗時最長的是并發(fā)標記和并發(fā)清除,這兩個過程都可以和用戶線程一起工作聘殖。
? ??疑問:既然標記-清除算法會造成內(nèi)存空間的碎片化晨雳,CMS收集器為什么使用標記清除算法而不是使用標記整理算法:
? ??答案:CMS收集器更加關注停頓,它在做GC的時候是和用戶線程一起工作的(并發(fā)執(zhí)行)奸腺,如果使用標記整理算法的話餐禁,那么在清理的時候就會去移動可用對象的內(nèi)存空間,那么應用程序的線程就很有可能找不到應用對象在哪里突照。
ZGC帮非?
GC分為兩種:Minor GC和Full GC
Minor GC是發(fā)生在新生代中的垃圾收集動作,采用的是復制算法。
Full GC是發(fā)生在老年代的垃圾收集動作末盔,采用的是標記-清除/整理算法筑舅。
內(nèi)存劃分
年輕代 一大塊Eden和兩塊Survivor
老年代
永久代
類加載機制
加載
? ??類加載指的是將類的class文件讀入內(nèi)存,并為之創(chuàng)建一個java.lang.Class對象陨舱,作為方法區(qū)這個類的數(shù)據(jù)訪問的入口翠拣。
鏈接
? ??鏈接指的是將Java類的二進制文件合并到jvm的運行狀態(tài)之中的過程。在鏈接之前游盲,這個類必須被成功加載误墓。(驗證,準備背桐,解析)
初始化
? ??到了初始化階段优烧,才真正執(zhí)行類中定義的Java程序代碼(或者說是字節(jié)碼)