1. 程式人生 > >學習虛擬機器(jvm)必須知道的東西

學習虛擬機器(jvm)必須知道的東西

我一共寫了兩篇部落格,這一篇是為了讓大家頭腦清楚,哪些重要,如果誰有不懂得

https://blog.csdn.net/weixin_40078053/article/details/80546846

這是我的另一篇部落格,對虛擬機器有詳細介紹,當然啦,滿滿全是乾貨,總結,否則看虛擬機器書有磚頭那麼厚,看了後面的的忘了前面的。

一、執行時資料區域

 執行緒隔離, 執行緒共享

方法區(執行時常量池)、堆、虛擬機器棧、本地方法棧、程式計數器

直接記憶體


二、hotspot虛擬機器物件

    2.1 物件的建立

            1.檢查 -->2.分配記憶體 (理解:指標碰撞空閒列表)-->3. Init   

    2.2 物件的記憶體佈局

                知道:3塊區域:物件頭、例項資料和對齊填充

  2.2 物件的訪問定位

            1、使用控制代碼訪問            2、使用直接指標訪問
三、OutOfMemoryError(棧寬) 異常和StackOverflowError(棧深)    3.1 Java堆溢位    3.2 虛擬機器棧和本地方法棧溢位   3.3 方法區和執行時常量池溢位

四、垃圾收集

     1.判斷物件存活

                4.1.1 引用計數器法

                4.1.2 可達性分析演算法

    2.引用

              強引用,軟引用,弱引用,虛引用

    3.Finalize方法(自救)

    4.3.1 回收方法區

        廢棄常量和無用的類

    4.4.1 標記—清除演算法(mark-sweep)

    4.4.2 複製演算法(copying)

    4.4.3 標記整理演算法(mark-compact)

    4.4.4 分代收集演算法

  5.垃圾收集器

             Serial收集器,ParNew收集器Parallel Scavenge(新生收集器),Serial Old 收集器,Parallel Old 收集器,CMS收集器(1.初始標記2.併發標記3.重新標記4.併發清除),G1收集器(初始標記,併發標記,最終標記,篩選回收)。

  6.記憶體分配與回收策略

      MinorGC:清理新生代

      MajorGC:清理老年代

      FullGC:清理整個堆空間

            4.6.1 物件優先在Eden分配

            4.6.2 大物件直接進入老年代

            4.6.3長期存活的物件將進入老年代

            4.6.4動態物件年齡判定

            4.6.4 空間分配擔保

五、虛擬機器類載入機制

       1.需要知道虛擬機器規範規定有且只有5種情況必須立即對類進行初始化和不會導致初始化的情況。

   2.類在載入進入記憶體的宣告週期:載入、驗證、準備、解析、初始化、使用和解除安裝7個階段

    5.3 類的載入器

        啟動類載入器,擴充套件類載入器,系統類載入器

雙親委派模型:優先順序:呼叫父類優先這張圖很明白吧。

六、Java記憶體模型與執行緒

            6.1記憶體間的互動操作

              

   lock(鎖定),unlock(解鎖),unlock(解鎖),load(載入),use(使用),assign(賦值),store(儲存),write(寫入)

    6.2 重排序

       重排序分成三種類型:1.編譯器優化的重排序2.指令級並行的重排序3.記憶體系統的重排序

    6.3 對於volatile型變數的特殊規則(注意)

    6.4 對於longdouble型變數的特殊規則

    6.5 原子性、可見性和有序性

    6.6  先行發生原則1.程式次序規則 2.管程鎖定規則 3.Volatile變數規則 4.執行緒啟動規則

              5.執行緒終止規則 6.執行緒中斷規則 7.物件終結規則 8.傳遞性

    6.7  Java執行緒排程:1.協同式排程   2.搶佔式排程

    6.8 狀態轉換:

    1.新建 2.執行 3.無限期等待 4.限期等待 5.阻塞 6.結束

 七、執行緒安全

1、不可變  2、絕對執行緒安全   3、相對執行緒安全 4、執行緒相容 5、執行緒對立

        7.1 執行緒安全的實現方法   
                1.互斥同步                        等待可中斷 , 公平鎖,  鎖繫結多個條件是指一個ReentrantLock物件可以同時繫結多個Condition物件     2.非阻塞同步
                 3.無同步方案(純程式碼)        7.2鎖優化
                適應性自旋、鎖消除、鎖粗化、輕量級鎖和偏向鎖

八、逃逸分析

    如果不能被其它 方法呼叫,就可以優化:棧上分配,同步消除,標量替換(資料可以繼續分解,就稱為聚合量)