原创 java源碼閱讀之Spliterator

Spliterator是java 8纔開始提供的一個迭代器實現,從名稱可以看出來,Spliterator是一個可分割的迭代器,用來分割和迭代給定源的元素,這裏的源可以是collection,array和io等。 spliterator的

原创 java源碼閱讀之ThreadPoolExecutor

概述 先看一下ThreadPoolExecutor的繼承關係: 線程池ThreadPoolExecutor主要用來解決兩個問題: 通過減少每個任務的調度開銷,從而提高大量異步任務執行效率 提供了一種管理和限制資源(如線程)的方法

原创 Java源碼閱讀之ArrayDeque

ArrayDeque是Deque接口的可調整大小的實現。 ArrayDeque沒有容量限制,可以根據需要增長容量以支持使用。 ArrayDeque不支持null元素。可以當作stack或者queue使用, 當用作stack時,Arr

原创 maven-shade-plugin踩坑記

準備做一個kafkaconsumer.jar命令行工具,採用maven-shade-plugin插件作爲打包工具,只修改了main-class配置如下: <build> <plugins> <pl

原创 Java源碼閱讀之LinkedHashMap

顧名思義,LinkedHashMap是基於鏈表實現的有序的HashMap。LinkedHashMap內部維護了一個雙向鏈表,鏈表定義了其元素迭代的順序,通常的順序就是元素被插入到LinkedHashMap的順序。 LinkedHashM

原创 java源碼閱讀之LinkedHashSet

LinkedHashSet是基於LinkedList實現的HashSet。 它與HashSet的區別在於LinkedHashSet內部維護了一個雙向鏈表,這個鏈表用來記錄HashSet的迭代順序。通常的迭代順序就是元素的插入順序,但如果

原创 java源碼分析之HashSet

HashSet實現了Set接口,由一個哈希表(實際上是一個HashMap實例)緩存數據。對Set的迭代沒有保證元素順序,特別是不能保證訂單會隨着時間的推移而保持不變。HashSet允許null元素。 遍歷HasHSet需要的時間與Has

原创 apache hbase的region 分割與合併

原文地址:APACHE HBASE REGION SPLITTING AND MERGING 本文我們將深入探討hbase的核心領域之一:region分割與合併。 具體來說,我們將詳細討論hbase如何在region間做負載均衡,以及

原创 java源碼閱讀之TreeMap

先看看TreeMap的繼承關係: TreeMap是一個基於“紅黑樹”實現的導航映射(NavigableMap)。其映射的Key根據自然順序排列,或者根據映射創建時提供的比較器排列。 由於TreeMap繼承了SortedMap,這要求

原创 jvm內存分配

1.對象分配 堆上分配 優先在Eden區分配 在JVM新生代堆內存一般由一塊Eden區和兩塊Survivor區組成。在大多數情況下, 對象在新生代Eden區中分配, 當Eden區沒有足夠空間分配時, JVM會發起一次Minor GC,

原创 jdk源碼閱讀之ArrayList

ArrayList是我們java編碼過程中最常用的集合類型。它在java collection framework中的位置如下: ArrayList是List的可變大小實現,它實現了List的所有可選操作,允許所有元素,包括null。

原创 java源碼閱讀之LinkedList

LinkedList是List接口的雙向鏈表實現。它繼承了AbstractSequentialList抽象類,這個抽象類我們在AbstractList中討論過,AbstractSequentialList用於抽象“循序訪問”的集合。Lin

原创 jdk源碼閱讀之AbstractList

AbstractList繼承了AbstractCollection, 實現了List接口。它提供了實現“隨機訪問”的List的一些方法。可以最大限度的減少實現隨機訪問的數據存儲(如LinkList)的工作量,而如果需要實現隨機訪問的Lis

原创 java之垃圾收集器

總結垃圾收集器前,先總結下如何識別垃圾對象相關的知識。 如何識別垃圾對象 常見的方法有引用計數器法和可達性分析法。 引用計數法的邏輯非常簡單:在堆中存儲對象時,在對象頭處維護一個counter計數器,如果一個對象增加了一個引用與之相連,則

原创 java 運行時數據區詳解

java虛擬機定義了若干java程序運行時產生的運行時數據區,他們中有一些隨着程序(進程)創建而創建,另一些則跟隨線程的生命週期創建和銷燬,瞭解這些對java程序員排查outofmemoryError錯誤和性能優化有着非常重要的意義。 j