轉(zhuǎn)載請注明原文出處,謝謝!
接下我將總結(jié)一下垃圾收集的東西,首先補充一下基礎知識。
? ? 可能之前大家已經(jīng)接觸過收集器了,這里將會對收集器的一些基礎知識進行描述。
? ? GC算法我的上一篇已經(jīng)有過描述了,這里將會講解一些硬件上東西,處理器和線程,內(nèi)存和cache的一些東西。
接下來我們,看一下下圖是至強cpu的一張圖,cache這個東西大多數(shù)時候都是被我們忽略了。

處理器
Linux使用了Ring3級別運行用戶態(tài),Ring0作為內(nèi)核態(tài),沒有使用Ring1和Ring2。Ring3狀態(tài)不能訪問Ring0的地址空間,包括代碼和數(shù)據(jù)。


線程是單一順序控制流(按照代碼順序執(zhí)行),線程有三個狀態(tài),執(zhí)行,就緒,準備。
引入線程的操作系統(tǒng)中,把線程作為調(diào)度和分派的基本單位,線程是獨立運行的基本單位。
調(diào)度器是操作系統(tǒng)的組件,是為了確定,任意時刻哪些線程在哪些處理器上運行。
既然上面都貼圖了,可以看到10核20線程,這個技術叫做超線程,指多個邏輯處理器公用一條指令流水線。調(diào)度器運行線程和處理器間有一定的親和性。(當然空閑核心怎么竊取其他的核心上的線程這個我還不知道,希望知道的大牛給予回復)
分時操作系統(tǒng)是把CPU的時間劃分成長短基本相同的時間區(qū)間,即"時間片",通過操作系統(tǒng)的管理,把這些時間片依次輪流地分配給各個用戶使用.如果某個作業(yè)在時間片結(jié)束之前,整個任務還沒有完成,那么該作業(yè)就被暫停下來,放棄CPU,等待下一輪循環(huán)再繼續(xù)做.此時CPU又分配給另一個作業(yè)去使用。
內(nèi)存
物理內(nèi)存可能是跨越多個內(nèi)存單元和處理器的,不過從垃圾收集器的角度來看,共享內(nèi)存看起來就是一塊由字或者字節(jié)組成的單個地址空間。
這里順帶提一下JVM的內(nèi)存模型,JVM線程間通信有兩種方式,一種是基于消息的,一種是共享內(nèi)存。jvm是基于共享內(nèi)存實現(xiàn)的。

高速緩存
相對于cpu的計算速度來說,內(nèi)存的速度的確非常慢的,現(xiàn)在的處理器和內(nèi)出間通常會架設一到多層高速緩存,每一層間的速度當然不一樣,這玩意貴弄不了太大?,F(xiàn)代處理器大多為多級處理器,至強這款,就為三級處理器。cache命中后能提高交互速度。 ??深入了解搓這里。