并發(fā)編程有3個源頭性問題:緩存導(dǎo)致的可見性問題,編譯優(yōu)化導(dǎo)致的有序性問題,以及線程切換導(dǎo)致的原子性問題。解決可見性問題和有序性問題的方法是按需禁用緩存和編譯優(yōu)化,Java的內(nèi)...
并發(fā)編程有3個源頭性問題:緩存導(dǎo)致的可見性問題,編譯優(yōu)化導(dǎo)致的有序性問題,以及線程切換導(dǎo)致的原子性問題。解決可見性問題和有序性問題的方法是按需禁用緩存和編譯優(yōu)化,Java的內(nèi)...
為什么要有 Java內(nèi)存模型? 并發(fā)編程的3個源頭問題分別是: 可見性,由緩存導(dǎo)致的可見性問題 有序性,由編譯優(yōu)化導(dǎo)致的有序性問題 原子性,由線程切換導(dǎo)致的原子性問題 Jav...
操作系統(tǒng)使用信號量解決并發(fā)問題,Java選擇使用管程(Monitor)解決并發(fā)問題。信號量和管程是等價的,可以使用信號量實現(xiàn)管程,也可以使用管程實現(xiàn)信號量。 管程就是指管理共...
HashMap 是一種 KV 形式的數(shù)據(jù)結(jié)構(gòu),允許有一個 key 為 null,value 允許為 null。HashMap 的存儲,使用的是哈希表,將 key 通過 Has...
fail-fast 快速失敗,是指在遍歷集合時,檢查遍歷過程中集合的modCount是否改變,如果改變就會拋出java.util.ConcurrentModification...
將Array轉(zhuǎn)為List: 使用 Arrays.asList(),轉(zhuǎn)化后的 List 不能 add(),否則會報 java.lang.UnsupportedOperation...
新生代滿了會觸發(fā) Young GC,老年代滿了會觸發(fā) Old GC。GC時會回收對象,那么具體是什么樣的對象會被垃圾回收器回收呢? 可達(dá)性分析算法,判斷是否被 GC Root...
我們都知道以 .java 結(jié)尾的 Java 源文件,經(jīng)過編譯之后會變成 .class 結(jié)尾的字節(jié)碼文件。JVM 通過類加載器來加載字節(jié)碼文件,然后再執(zhí)行程序。 什么時候加載一...
圖解JVM類加載機(jī)制和雙親委派模型一文中講述了 Java 類加載的過程,它包含加載、驗證、準(zhǔn)備、解析、初始化、使用、卸載這 7 個步驟。在準(zhǔn)備階段,JVM會將類加載到內(nèi)存中,...
CMS 垃圾回收器進(jìn)行垃圾回收的時候會分成 4 個階段:初始標(biāo)記、并發(fā)標(biāo)記、重新標(biāo)記、并發(fā)清理。其中初始標(biāo)記階段會「Stop the world」,并且回收被 GC Root...