原创 List remove ConcurrentModificationException問題分析

Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodificatio

原创 JVM -Java內存模型以及內存屏障深入解讀(Java merory model)

1.Java內存模型 1.1主內存與工作內存 java內存模型的主要目的是定義程序中各種變量的訪問規則,即關注在虛擬機中把變量存儲到內存和從內存中取出變量值這樣的底層細節。此處的變量(Variables)與Java編程中所說的變量有所區

原创 Java JVM 內存分配與回收策略

對象的內存分配,往大的方向講。就是在堆上分配(但也可能經過JIT編譯後被拆散爲標量類型餅間接棧上分配),對象主要分配在新生代的Eden 區上,如果啓動 本地線程分配緩衝(TLAB),將按照線程有限在TLAB上分配。在少數情況下也可能直接分

原创 JVM 類加載機制之ClassLoader&雙親委派深入解讀

文章目錄1.class sycle2 不同類加載器說明3.ClassLoader加載類過程(雙親委派)4.ClassLoader加載類過程(雙親委派流程圖)5.爲什麼需要雙親委派機制?6.能不能自己寫個類叫java.lang.Sy

原创 Card Table 卡表

因何而生 現代JVM,堆空間通常被劃分爲新生代和老年代。由於新生代的垃圾收集通常很頻繁,如果老年代對象引用了新生代的對象,那麼,需要跟蹤從老年代到新生代的所有引用,從而避免每次YGC時掃描整個老年代,減少開銷。 對於HotSpot JVM

原创 OopMap 和 RememberedSet

OopMap 用於枚舉 GC Roots,記錄棧中引用數據類型的位置。 記錄棧上本地變量到堆上對象的引用關係。其作用時,垃圾收集時,收集線程會堆棧上的內存進行掃描,看看哪些位置存儲了Reference類型。如果風險某個位置確實存的時Ref

原创 JVM-- Happens-before(先行發生原則)

happens-before的定義 先行發生是Java內存模型中定義的兩項操作數之間餓的偏序關旭,如果操作A先行發生於操作B,其實就是在發生操作B之前,操作A產生的影響能被操作B觀察到,“影響”包括修改了內存中共享變量的值、發送了消息、調

原创 JVM--Java對象內存佈局

1.Java對象內存佈局 在JVM中,對象在內存中的佈局分爲三塊區域:對象頭、實例數據、對其數據。如下圖所示: 長度 內容 說明 32/64 bit Mark Word 存儲對象的HashCode或者鎖信息等

原创 JVM 多線程高併發--synchroized

1.synchroized 基本用法 1.1語義 原子性:確保線程互斥的訪問同步代碼 可見性:保證共享變量的修改能夠即時可見,其實通過對Java內存模型中“對一個變量unlock操作之前,必須同步到主內存中;如果對一個變量進行loc

原创 Java內存模型以及內存屏障深入解讀(Java merory model)

1.Java內存模型 1.1主內存與工作內存 java內存模型的主要目的是定義程序中各種變量的訪問規則,即關注在虛擬機中把變量存儲到內存和從內存中取出變量值這樣的底層細節。此處的變量(Variables)與Java編程中所說的變量有所區

原创 Java源碼閱讀方法論之探討

五一完成編寫

原创 Java 多線程與高併發之CAS(樂觀鎖)深入解讀

目錄 what is CAS 簡介 背景介紹 源碼分析 AtomicInteger  unsafe.cpp  解決什麼問題? 存在哪些缺陷? 1.ABA問題(鏈表會丟數據) 2.長時間自旋非常消耗CPU資源 3.只能保證一個共享變量的原子

原创 垃圾回收算法

1.垃圾對象判定標準 1.1 引用計數法 給對象加一個引用計數器,每當有一個地方引用它時計數器值就加1 ,當引用失效時,計數器值就減1,任何時刻計數器爲0的對象就不可能再被使用。 優點:效率高,大部分情況下都是一個不錯的算法(Ja

原创 ClassLoader&雙親委派&類初始化過程

1.class sycle   類加載的生命週期:加載(Loading)–>驗證(Verification)–>準備(Preparation)–>解析(Resolution)–>初始化(Initialization)–>使用(Using)–

原创 List remove ConcurrentModificationException源碼分析

代碼塊 Java         Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayLis