- JVM內存結構:程序計數器、堆、棧、方法區、直接內存,運行時常量池的區別
程序計數器:是一塊較小的內存空間,可以把它看成是當前線程所執行的字節碼的行號指示器,字節碼解釋器就是通過改變計數器的值來選取下一條需要執行的字節碼指令。Java虛擬機的多線程是通過線程輪流切換並分配處理器執行時間的方式來實現的,任何時間,一個處理器都只會執行一條線程,因此爲了線程切換後能恢復到正確的位置,每個線程都需要一個獨立的程序計數器,各條線程之間計數器互補影響,獨立存儲,所以是“線程私有”的內存。是唯一一個沒有規定任何內存泄露的區域
棧:棧分爲Java虛擬機棧和本地方法棧,也是線程私有
Java虛擬機棧:存放局部變量表,局部變量表存放了各種基本數據類型,對象引用類型
本地方法棧:Native方法服務
堆:線程共享,存放對象實例
方法區:線程共享,存儲虛擬機加載的類信息、常量、靜態變量
運行時常量池:存放編譯期生成的各種字面量和符號引用
直接內存:JDK1.4中引用NIO類,使用Native函數庫直接分配堆外內存,然後通過一個存儲在Java堆中的DirectByteBuffer對象作爲這塊內存的引用進行操作
- Java內存模型:內存可見性、重排序、順序一致性、volatile、鎖、final
https://blog.csdn.net/qq_31997407/article/details/79705767
- 垃圾收集器
參考《深入理解JVM虛擬機》第三章,垃圾收集器與內存分配策略
- JVM參數及調優
https://blog.csdn.net/a_dreaming_fish/article/details/51208527
https://blog.csdn.net/baidu_39299382/article/details/80330311
- Java對象模型:oop-klass,對象頭
https://blog.csdn.net/baidu_39299382/article/details/80330399
- HotSpot:即時編譯器、編譯優化
https://blog.csdn.net/qq_26807245/article/details/80841051
-
類加載機制:classLoader、類加載過程、雙親委派(破壞雙親委派)、模塊化(jboss modules、osgi、jigsaw)
https://blog.csdn.net/baidu_39299382/article/details/80330442
-
虛擬機性能監控與故障處理工具:jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler
https://blog.csdn.net/baidu_39299382/article/details/80330476
- 編譯與反編譯 : javac,javap,jad,crf
https://blog.csdn.net/baidu_39299382/article/details/80330538