最近的學習狀態超級差,也沒有怎麼寫博客,知識點也都忘得差很少了。該複習一波了!java
圖示:算法
例子:緩存
String str = new String("hello");
上面的語句中變量str放在棧上,用new建立出來的字符串對象放在堆上,而"hello"這個字面量放在靜態區。學習
標記—清除算法:在二次標記後完成統一回收,在回收以後會產生大量不連續內存碎片,若是要建立一個較大內存的對象,沒有足夠連續內存,會再次觸發GCspa
標記—整理算法:清除的時候會把全部存活的對象向一端移動(歸整),而後清除code
複製算法:分爲大小相同的倆部份內存,每次只用一部分,當這部分的內存快滿的時候,把沒有被回收的對象移到另外一部分,把這部分清空(效率低)對象
分代收集算法:根據對象存活週期的不一樣,分爲新生代和老年代,新生代採用複製算法,老年代採用標記清除或標記整理blog
在新生代觸發的GC稱爲Minor GC;在老年代觸發的GC稱爲Full GC內存
類加載:將class文件加載到JVM中。類的加載是動態的,它不會一次性把全部類都加載到虛擬機,而是把一些必要的類先加載到虛擬機,而後用到哪些再加載,這樣節省了內存開銷。字符串
class文件是經過類加載器加載到JVM中的
分類:
類加載器在成功加載某個類以後,會把獲得的java.lang.Class類的實例緩存起來,這樣下次再加載這個類時候就能夠直接使用實例,而不會再次加載。
雙親委託模型:一個類加載器收到類加載的請求不會本身去嘗試加載這個類,而是交給它父類,依次向上。這樣,防止內存出現多份一樣的字節碼
類初始化
類初始分爲類的加載,鏈接,初始化。
加載:查找並加載類的二進制數據,在java堆中建立一個java.lang.Class對象
鏈接:包括驗證,準備,解析
初始化:爲類的靜態變量賦初始值
先這麼多,敬請期待「從入門到放棄」