原创 JDK源碼解讀暫時擱置

艹阿里雲要求轉C++ 我死了 要重頭開始學C++了 暫時先不搞JAVA了唉

原创 JDK源碼閱讀計劃(Day14&15) AQS

JDK11 AQS 若被請求的共享資源空閒,則會把當前請求資源的線程設置爲有效的工作線程,並且把共享資源設置爲鎖定狀態。如果被請求的共享資源被佔用,就把線程封裝爲Node加入到一個虛擬隊列中,具體是通過CLH隊列鎖的方式實現。

原创 JDK源碼閱讀計劃(Day15) j.u.c 之 LockSupport

基於JDK11 LockSupport 我們參考啃透JAVA併發先跑一個demo public static void main(String[] args) { Thread t = new Thread(()

原创 JDK源碼閱讀計劃(Day13) ConcurrentSkipListMap & 跳錶學習

跳錶 上圖可以看到,一個有序單鏈表,查找某元素的平均時間複雜度爲O(n) 跳錶本質上是在有序鏈表上建立多層索引,以實現二分查找。以空間換時間的思想,實現增刪查改平均時間複雜度爲O(lgn) 而skipList的結構可能有2種:

原创 JDK源碼閱讀計劃(Day12) BitSet

JDK11 BitMap原理&使用場景 用一個bit來存放一個狀態的容器。由於對內存佔用少,適合用於處理大規模數據和數據狀態不多的情況。畢竟一個bit只對應兩個狀態。 圖來自ref 假設原來有個int數組[1,2,3,6,7]需

原创 JDK源碼閱讀計劃(Day11) LinkedHashMap

繼承圖如下 LHM與HashMap /* * LinkedHashMap是有序Map,也是HashMap的子類,其基礎結構與HashMap一致 * 這裏有序的含義是說其遍歷順序與元素加入的順序有關 * 該Map中的元素按其

原创 (CMU15-721) An Empirical Evaluation of In-Memory MVCC 論文閱讀筆記

不好意思大部分是英文,點進來的應該都是master PHD了吧?這部分是15721第三課的課堂筆記,發現就是相當於把這篇論文講了一遍。如果只讀論文的話還是挺難的。。 Multi-version concurrency contro

原创 JDK源碼閱讀計劃(Day10) ConcurrentHashMap 擴容,計數部分

擴容 Hash表的擴容一般分爲: 哈希數組的擴容 一般是建立一個原來數組大小兩倍的數組,通常由單線程完成 數據遷移 把舊數組中的各個槽的結點重新分配到新的table中。通常涉及到Key值的rehash 而HashMap與Concu

原创 JDK源碼閱讀計劃(Day9) ConcurrentHashMap 非擴容,計數部分

JDK11 我們可以看到ConcurrentHashMap實現了ConcurrentMap,Serializable這兩個接口並且繼承了AbstractMap這個抽象類。 實現與提供的操作和HashMap類似,都是哈希數組+鏈表

原创 CMU15-721 《What’s really new with NewSQL》論文閱讀筆記

Study Notes on Course1 Video-bilibili Course Topics Focus on internals of single nodes in-memory database system. N

原创 JDK源碼閱讀計劃(Day8) HashMap 紅黑樹部分

紅黑樹 打開塵封已久的算法導論,好好翻開第13章… 紅黑樹的性質 是一種二叉搜索樹,可以保證在最壞情況下基本動態集合操作的時間複雜度爲O(lg n) 每個節點增加一個用於表示顏色的存儲位 紅黑樹能確保沒有一條路徑會比其他路徑長2

原创 (CMU15-721) An Evaluation of Concurrency Control with One Thousand Cores 論文閱讀筆記

摘要 CPU核數的增多,給併發控制帶來了巨大的壓力。 該論文實驗環境爲1024核,並且嘗試了七種併發控制的方法,但都失敗了。 啓示我們,面對多核芯片應該要重新設計數據庫的架構 導論 現如今的CPU速度提升往往是靠增大核數,而不是提

原创 JDK源碼閱讀計劃(Day6) AbstractMap & AbstractSet

JDK11 AbstractMap public abstract class AbstractMap<K,V> implements Map<K,V> { Map的抽象類實現,那有哪些Map繼承了這個抽象類呢? EnumMa

原创 JDK源碼閱讀計劃(Day7) HashMap 上

JDK11版本 今天看到篇文章如何閱讀JDK源碼,受益良多 今後讀源碼應該帶着問題來讀,而不是爲了讀而讀! 思考問題既要橫向比較(HashMap,ConcurrentHashMap或者其他map之間的區別),也要縱向比較(不同JD

原创 JDK源碼閱讀計劃(Day4) Collection,List,AbstractCollection & AbstractList

JDK11 Collection接口 public interface Collection<E> extends Iterable<E> { 作爲一元容器的頂級接口,實現類包括線性表(List,Queue,Stack)和集合(