JVM學習筆記——對象的建立過程

title: JVM學習筆記——對象的建立過程
date: 2018/9/1 16:01:35
description: 最近開始着手JVM的學習,在這裏把本身學習過程當中的筆記分享出來,但願能幫到一些小夥伴,同時也是對本身的學習的一個梳理。安全

對象的建立過程

  1. 檢查該類是否已經被加載、解析、初始化,沒有則執行類加載。(詳細類加載的過程稍後再作介紹)學習

  2. 類加載檢查經過後,從Java堆中劃分出一塊空間,爲對象分配內存。(所需內存大小在類加載完成後可肯定)Java堆根據所採用的垃圾收集器內存空間有所不一樣,分爲規整與不規整兩種狀況。
    • 規整的狀況,使用過的內存放在一邊,空閒的內存在另外一邊,中間以一個指針做爲分界,分配時移動分界指針便可,這種分配方式稱爲「指針碰撞」(Bump the Pointer)。線程

    • 非規整的狀況,使用與空閒的內存相互交錯,虛擬機須要維護一個記錄空閒內存空間的列表,分配時從列表中尋找空間劃分,這種分配方式稱爲「空閒列表」(Free List)。指針

    • 由於涉及到臨界數據(分界指針&空閒列表)的修改,因此內存分配時並非線程安全的,一般有兩種解決方案。
      • 在分配內存空間的動做處進行同步處理。
      • 採用本地線程分配緩衝(Thread Local Allocation Buffer,TLAB),每一個線程在堆中預先分配一小塊內存,只有這塊內存用完後須要從新申請時,才進行同步鎖定。TLAB能夠經過-XX:+/-UseTLAB來設定。

  3. 爲內存空間進行初始化爲零值,設置各種變量的默認初始值。對象

  4. 對象頭信息設置:GC分代年齡、對象的哈希碼、是哪一個對象的實例等等。ip

相關文章
相關標籤/搜索