本人做Java5年有餘,仍像個應屆畢業生,知其然不知其所以然,面試多次失敗,痛定思痛,決定梳理下自己的知識點。
本章知識點基於JDK 8
Java知識點總結
JVM相關知識
JVM內存結構
程序計數器
Java虛擬機棧
棧幀
棧幀存儲了局部變量表、操作數棧、動態鏈接、方法出口等信息。
本地方法棧
Java堆
方法區
運行時常量池
直接內存
http://blog.csdn.net/bluetjs/article/details/52874852
類加載機制
http://blog.csdn.net/u013256816/article/details/50829596
垃圾回收機制
如何確定回收對象
- 引用計數器算法
- 可達性分析算法
- 引用類型
- finalize方法
垃圾收集算法
- 標記清楚算法(Mark-Sweep)
- 複製算法(Copying)
- 標記整理算法(Mark-Compact)
HotSpot算法實現
- 枚舉根節點
- 安全點
- 安全區域
垃圾收集器
http://blog.csdn.net/tonytfjing/article/details/44278233
http://blog.csdn.net/java2000_wl/article/details/8030172
http://blog.csdn.net/renfufei/article/details/54885190
JVM調優
基礎
集合
List
ArrayList和LinkedList的選型?
sdsd
Map
反射
多線程
Java內存模型
先行發生原則(happens-before)
- 程序次序規則:一個線程內,按照代碼順序,書寫在前面的操作先行發生於書寫在後面的操作。準確地說,應該是控制流的順序而不是程序代碼順序,因爲要考慮分支、循環等結構。
- 鎖定規則:一個unLock操作先行發生於後面對同一個鎖的lock操作
- volatile變量規則:對一個變量的寫操作先行發生於後面對這個變量的讀操作
- 傳遞規則:如果操作A先行發生於操作B,而操作B又先行發生於操作C,則可以得出操作A先行發生於操作C
- 線程啓動規則:Thread對象的start()方法先行發生於此線程的每個一個動作
- 線程中斷規則:對線程interrupt()方法的調用先行發生於被中斷線程的代碼檢測到中斷事件的發生
- 線程終結規則:線程中所有的操作都先行發生於線程的終止檢測,我們可以通過Thread.join()方法結束、Thread.isAlive()的返回值手段檢測到線程已經終止執行
- 對象終結規則:一個對象的初始化完成先行發生於他的finalize()方法的開始
volatile 語義
volatile提供了兩種特性:
1. 保證此變量對所有其他線程的可見性,指當一條線程修改了這個變量的值,新值對於其他線程來說是可以立即得知的。
2. 禁止指令重排序優化。
實現原理:
1. Lock前綴指令會引起處理器緩存回寫到內存
2. 一個處理器的緩存回寫到內存會導致其他處理器的緩存失效
要使 volatile 變量提供理想的線程安全,必須同時滿足下面兩個條件:
1. 對變量的寫操作不依賴於當前值。
2. 該變量沒有包含在具有其他變量的不變式中。
synchronized 語義
synchronized實現同步的基礎:java中每一個對象都可以作爲鎖
1. 普通同步方法,鎖是當前實例對象。
2. 靜態同步方法,鎖是當前類的class對象
3. 同步方法塊,鎖是Synchronized括號裏的對象
1和3的實現方式是monitorenter和monitorexit指令。2的實現方式是方法的簽名裏有ACC_SYNCHRONIZED標記,實質上還是用的monitorenter和monitorexit實現。
Java對象頭
如果對象是數組類型,則虛擬機用3個字寬存儲對象頭,如果不是,則用2個字寬存儲。在32位虛擬機裏,一個字寬是4個字節。
長度 | 內容 | 說明 |
---|---|---|
32/64bit | Mark Word | 存儲對象的Hashcode和鎖信息 |
32/64bit | Class Metadata Address | 存儲到對象類型數據的指針 |
32/32bit | Array length | 數組長度(如果是數組) |
Mark Word在不同鎖狀態下的存儲格式:
鎖的狀態
- 偏向鎖
- 輕量鎖
- 重量級鎖
final 語義
Unsafe
線程池
實現原理:
流
網絡
日期
異常
Steam
分佈式
CAP理論
分佈式事務
http://www.codeceo.com/article/distributed-transaction.html
http://blog.jobbole.com/89140/
http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency
數據庫
ACID
- 原子性(Atomicity)
- 一致性(Consistency)
隔離性(Isolation)
持久性(Durability)