原创 JDK源碼分析-BlockingQueue

概述BlockingQueue 意爲“阻塞隊列”,它在 JDK 中是一個接口。所謂阻塞,簡單來說就是當某些條件不滿足時,讓線程處於等待狀態。例如經典的“生產者-消費者”模型,當存放產品的容器滿的時候,生產者處於等待狀態;而當容器爲空的時

原创 JDK源碼分析-ScheduledExecutorService

概述接口的繼承結構如下:下面分析這幾個接口的定義。Executor從名字來看,Executor 可譯爲“執行器”,它的作用就是執行任務。該接口只有一個 execute 方法:public interface Executor {

原创 JDK源碼分析-ScheduledThreadPoolExecutor

概述ScheduledThreadPoolExecutor 也是一個線程池類,是線程池類 ThreadPoolExecutor 的子類。除了 ThreadPoolExecutor 相關的方法之外,它還增加了執行定時任務和週期性任務的方法

原创 JVM筆記-內存分配策略

1. 概述 1.1 簡述Java 技術體系的自動內存管理,最根本的目標就是解決兩個問題:「自動化」地給對象分配、回收內存空間。內存回收策略主要就是前面介紹的各種垃圾回收機制;而對象內存分配的規則並不固定,JVM 規範並未規定新對象的創建

原创 JVM筆記-類加載機制

JVM 不和包括 Java 在內的任何語言綁定,它只與 "Class文件" 這種特定的二進制文件格式所關聯。而 Class 文件也並非只能通過 Java 源文件編譯生成,可以通過如下途徑而來: JVM 把描述類的數據從 Class 文

原创 JDK集合框架小結

前面的一些文章主要分析了 Java 集合框架(Java Collections Framework, JCF)中常用的類和接口,本文打算做個整體的小結。JCF 主要包括 Collection 接口系列和 Map 接口系列,它們的繼承結構

原创 JDK源碼分析-HashMap(1)

概述HashMap 是 Java 開發中最常用的容器類之一,也是面試的常客。它其實就是前文「數據結構與算法筆記(二)」中「散列表」的實現,處理散列衝突用的是“鏈表法”,並且在 JDK 1.8 做了優化,當鏈表長度達到一定數量時會把鏈表轉

原创 JVM筆記-性能監控與分析工具

1. 概述 前面幾篇文章分析了 JVM 的一些概念,大部分都是偏理論的,本文介紹一些可以實操的 JVM 性能監控與分析工具。 主要包括 JDK 自帶的一些常用工具,以及阿里開源的 Java 診斷工具 Arthas。 2. 性能監控與故障

原创 JVM相關問題彙總

文章目錄1. jconsole連接不上本地JVM進程 1. jconsole連接不上本地JVM進程 環境 OS:macOS Mojave 10.14.5 JDK版本:HotSpot 1.8.0_191 IDE版本:Intel

原创 JVM筆記-後端編譯與優化

1. 概述 前面分析了 JVM 的前端編譯器 Javac,本文分析後端編譯器:即時編譯器(JIT 編譯器)和提前編譯器(AOT 編譯器)。 其實二者都不是 JVM 必需的組成部分。但是,後端編譯器編譯性能的好壞、代碼優化質量的高低,卻是

原创 JVM筆記-前端編譯與優化

1. 概述 所謂”編譯“,通俗來講就是把我們寫的代碼“翻譯“成機器可以讀懂的機器碼。而編譯器就是做這個翻譯工作的。 Java 技術中的編譯器可以分爲如下三類: 前端編譯器:把 *.java 文件轉變爲 *.class 文件的過程。比如

原创 JVM筆記-運行時內存區域劃分

1. 概述 Java 虛擬機在執行 Java 程序的過程中會把它管理的內存劃分爲若干個不同的數據區域。它們各有用途,有些隨着虛擬機進程的啓動一直存在(堆、方法區),有些則隨着用戶線程的啓動和結束而建立和銷燬(程序計數器、虛擬機棧、本地方

原创 JDK源碼分析初步整理

1. 囉嗦一下不知不覺一年又到了尾聲,從年初開始寫 「JDK 源碼分析」這個系列,而今已經過了大半年,文章也寫了幾十篇,雖說不多但也不算太少(好像還是有點少????),爲便於查看,這裏簡單做個彙總和分類。2. JDK 源碼系列初步彙總2

原创 JDK源碼分析-ReentrantReadWriteLock

概述 ReentrantReadWriteLock 出場了。ReentrantReadWriteLock 是讀寫鎖,它維護了一對鎖:一個讀鎖,一個寫鎖。讀鎖之間是共享的,寫鎖是互斥的。與 ReentrantLock 相比,讀寫鎖在讀多寫

原创 Java反射機制與動態代理

1. 概述Java 反射機制與動態代理我們平時寫代碼可能用得比較少,但在各種常見的框架(Spring、MyBatis 等)中卻屢見不鮮。有句話叫“無反射,不框架;無代理,不框架”。由於以後打算閱讀和學習框架的源碼,這裏先簡單回顧反射機制