JVM總圖:
類加載器,執(zhí)行引擎,運行時數(shù)據(jù)區(qū)

image.png
類加載子系統(tǒng),執(zhí)行引擎,運行時數(shù)據(jù)區(qū),三部分關系圖

image.png
線程獨享部分結構關系

image.png
類的加載過程(生命周期)

image.png
類加載器

image.png
類加載機制

image.png
堆
存放Java對象,所有的對象(包括數(shù)組,但Class對象除外)數(shù)據(jù)實際存放地方。堆是程序級別,每一個Java程序共享一個堆(所以存在多線程訪問堆內存同步問題)

image.png
jdk1.8:取消了永久代,由元數(shù)據(jù)區(qū)替代,常量池在元數(shù)據(jù)區(qū)
jdk1.7:有永久代,但已經逐步“去永久代”,常量池在堆
jdk1.6:有永久代,常量池在方法區(qū)
方法區(qū)
存儲了每個類的信息(包括類的名稱、方法信息、字段信息)、靜態(tài)變量、常量以及編譯器編譯后的代碼等
https://www.cnblogs.com/duanxz/p/3728737.html
棧
存的是引用(如果是基本類型,則存的是值),引用(直接或間接)指向堆中的對象。棧是線程級別,每一個線程有各自的棧。棧又分為兩種,一是Java方法棧,一是本地方法棧(nativie method stack)。另外,每個線程都有各自的程序計數(shù)器,也是棧格式的。
直接內存
堆和棧區(qū)別
https://www.cnblogs.com/ityouknow/p/5603287.html
https://www.cnblogs.com/ityouknow/p/5610232.html