堆(棧管運行,堆管存儲,堆是垃圾收集器管理的主要區域)java
方法區(存放類的元數據信息,常量和靜態變量)算法
直接內存(非運行數據區的一部分)緩存
Java內存模型(Java Memory Model,JMM)是java虛擬機規範定義的,工做內存和主內存。Java內存模型中規定全部變量都存儲在主內存,主內存是共享內存區域,全部線程均可以訪問,服務器
但線程對變量的操做(讀取賦值等)必須在工做內存中進行,首先要將變量從主內存拷貝的本身的工做內存空間,而後對變量進行操做,操做完成後再將變量寫回主內存,不能直接操做主內存中的變量,工做內存中存儲着主內存中的變量副本拷貝markdown
volatie函數
總線嗅探機制優化
每一個處理器經過嗅探在總線上傳播的數據來檢查本身的緩存值是否是過時了spa
類加載檢查 -> 分配內存(執行碰撞/空閒列表) -> 初始化零值 -> 設置對象頭 -> 執行 init 方法線程
類加載過程:加載->鏈接->初始化。鏈接過程又可分爲三步:驗證->準備->解析。code
BootstrapClassLoader(啓動類加載器)
ExtensionClassLoader(擴展類加載器)
AppClassLoader(應用程序類加載器)
自定義加載器
每個類都有一個對應它的類加載器。系統中的 ClassLoder 在協同工做的時候會默認使用 雙親委派模型 。即在類加載的時候,系統會首先判斷當前類是否被加載過。已經被加載的類會直接返回,不然纔會嘗試加載。加載的時候,首先會把該請求委派該父類加載器的 loadClass()
處理,所以全部的請求最終都應該傳送到頂層的啓動類加載器 BootstrapClassLoader
中。當父類加載器沒法處理時,才由本身來處理。當父類加載器爲null時,會使用啓動類加載器 BootstrapClassLoader
做爲父類加載器。
java.lang.Object
類的話,那麼程序運行的時候,系統就會出現多個不一樣的 Object
類。GC 調優原則;
多數的 Java 應用不須要在服務器上進行 GC 優化; 多數致使 GC 問題的 Java 應用,都不是由於咱們參數設置錯誤,而是代碼問題; 在應用上線以前,先考慮將機器的 JVM 參數設置到最優(最適合); 減小建立對象的數量; 減小使用全局變量和大對象; GC 優化是到最後不得已才採用的手段; 在實際使用中,分析 GC 狀況優化代碼比優化 GC 參數要多得多。
GC 調優目的;
將轉移到老年代的對象數量下降到最小; 減小 GC 的執行時間。
GC 調優策略;
標記清除,複製,標記整理和分代收集算法
強引用、軟引用、弱引用、虛引用