成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

圖文故事:一文帶你走進JVM的世界

云計算 虛擬化
由于我們同時能做的任務有限,所以我們需要為不同的任務劃分出不同的時間片,我們在切換任務的時候,需要一個記錄者,能夠記錄我們這個任務做到了哪里,下次回來能夠繼續做。

 [[428766]]

最近的業余時間基本都在寫一個簡單的RPC框架(附帶詳解以及知識點講解那種,爭取新手都能看懂),所以原創文耽擱了一些,不過也可以讓你們緩沖一下,前今天發了一些不錯的原創技術文章。加油!奧利給!❞

小強是一個工作3年有余的開發工程師,從他的發量你就可以知道,小強資歷還尚淺。

 

程序員驚人發量

最近公司沒什么事,他也開始無聊起來了。這天下午,同事們在激烈的討論這業務,但他沒有參與,于是他決定學習些什么知識,無聊的翻著各個網頁,發現JVM是各位大神們推薦過的知識,于是決定好好看一看。

5分鐘過后……

小強感到這知識有些枯燥乏味,怪不得是大神們能看的!又看了幾分鐘,小強倦意襲來,揉了揉睡眼惺忪的眼睛。

然而就在這一刻,他突然發現周圍同事激烈討論的聲音聽不到了,安靜到了極致。

1. 入界

小強努力的睜開眼睛,才發現自己竟然身處一個白茫茫的空間中,嚇得一跳,心想我這是怎么了,穿越了?但穿越也得穿越到一個人間如畫,美女如云的地方啊……,這境地……

突然前方走來一個白胡子老頭,小強正想開口,老頭捷足先登:你好,我是這個JVM世界的締造者,你可以叫我 “HotSpot”,不過這無所謂,因為我所創造的這個世界,是按照 “JVM規范” 來完成的。我正在休息時,發現來了一位客人,原來是你。

小強:我是想問……

老頭:不用問,我知道,你是想了解一下我創造的這個世界吧!跟我來吧。

這老頭,我還沒說話,這就結束了!好吧,跟你看看且說。

老頭邊走邊道:JVM 的世界 空間是有限的,我們堅持一個原則 : 各司其職,不留無用之人!

小強:啊!好殘酷。

老頭:不,這不是殘酷,我們這個世界生來就是為客戶提供服務,為客戶發光發熱的,每個人奉獻出了自己的能力就是圓滿完成任務,退出舞臺是理所應當的,也是他們最好的歸宿。

小強:也是,這樣這個世界才不會那么擁擠,大家才能井然有序的工作,我怎么這么不開竅呢……

2. 布局

老頭前面停了下來:過來,帶你先看看我們世界的整體組成和中心區如何布局。

 

圖文故事:一文帶你走進JVM的世界

 

整體布局圖

先來看看我們最主要的日常工作區(運行時數據區),為了讓我們工作起來更有效率,我們將世界空間劃分為這幾個板塊。

「居住區-堆」

這里是人們工作外的居住區,居住區我們基于人們的年齡也進一步分出了,伊甸區,幸存者區,老年區。

 

圖文故事:一文帶你走進JVM的世界

 

居住區

「工作區-棧」

每個任務來臨時,都會在工作區單獨開辟出一個地方來用于完成這個任務。

 

圖文故事:一文帶你走進JVM的世界

 

棧幀圖

「記錄者-程序計數器」

由于我們同時能做的任務有限,所以我們需要為不同的任務劃分出不同的時間片,我們在切換任務的時候,需要一個記錄者,能夠記錄我們這個任務做到了哪里,下次回來能夠繼續做。

「倉庫管理區-方法區」

這里存放著工人的模板以及常用的不變的工具等。

3. 生與死

這里工作的人們都會經歷生與死,大部分人們活不到老年,但這不重要,重要的是他為我們做出了貢獻。

3.1 出生

老頭:這里的每個人都有一個模板(類),看到那個正在居住區休息的高個嗎?他叫張三,他是根據外部客戶給定的模板 “ User Class” 創造的,他可是客戶最喜愛的工人了。你知道客戶的這些模板(類)是如何進入的到我們的世界中的嗎?

小強:這個我知道點,之前看過一點點。這個過程還是有些復雜的,客戶的模板(類)是通過一個翻譯工廠(編譯器) 將它翻譯成class 字節碼,因為你們這個世界只認識字節碼,然后有你們的加載系統將它們加載到這里。

加載過程中有這些階段:

 

圖文故事:一文帶你走進JVM的世界

 

類加載過程

其中加載階段是由加載器來完成的。

老頭:是的,我們提供了三種加載器,啟動類加載器,擴展類加載器,應用類加載器,當然客戶也可以自定義加載器。

 

圖文故事:一文帶你走進JVM的世界

 

雙親委派模型

小強:他們遵循著雙親委派模型,但是我一直不太理解這個詞!

老頭:這是由于你們語言翻譯的問題導致,這個模式叫 “parents delegation”,知道了吧!它是指有你的父輩們來幫你完成。

小強:那雙親委派模式 有什么好處呢?

老頭:

具有優先級層次的關系可以避免模板(類)的重復加載

安全考慮可以防止Java核心api被替換

老頭繼續道:那連接過程中的三步,你知道是做什么嗎?

小強:具體的我就不知道了哎……

老頭笑了笑:對于客戶定義的模板(類),我們可不是來者不拒的,為了我們這個世界的安全以及能提供更好的服務,我們會對模板做一些驗證及后續操作。

驗證包括格式驗證,元數據驗證,字節碼驗證,符號驗證。當驗證通過后,我們會為模板所依賴的東西(類變量)分配空間,最后將符號引用替換為直接引用。

老頭看了看小強眉頭緊皺,于是繼續補充:你可能不了解什么是符號引用和直接引用!

符號引用就是在編譯時,并不知道模板(類)所依賴的其他東西,會在我們的空間中的哪個位置,只能用符號來表示。

直接引用就是 所有東西被加載到這里后會有自己的真實空間地址,然后去替換符號引用。這樣運行時就能找到它們所依賴的東西了。

最后就是初始化了,這個階段主要是對類變量初始化,是執行類構造器的過程。

小強:我怎么沒看到這些模板呢?

老頭:這些模板我把他們隱藏在世界的后方,大多數人是見不到的,他們統稱為 Klass。

小強:不對啊!你是不是搞錯了?不應該叫 Class嗎?

老頭:哈哈!我剛才說了,大多數人見不到,你就是其中之一啊!你們平時見到的 Class只是對 Klass的一種封裝而已,真正記錄模板中的具體元信息的就是 Klass。這回要記住了,年輕人。

3.2 工人

小強:為什么你的工人是等量差的身高呢?

 

[[428770]]

 

對象長度

老頭:你的觀察還是挺仔細的嘛!是的,他們確實是等量差的,想要知道為什么,要先了解這些工人有哪些部分組成。

 

圖文故事:一文帶你走進JVM的世界

 

對象的組成

它們頭部大小是固定的,身體大小是由自己的屬性數據決定的,而最后的腳部卻是我來決定的,如果前面兩個數據的大小沒有達到 8 的倍數,那么我就會來填充,所以就是這里的填充使得他們擁有了等量的身高差(內存對齊)。

我是基于兩點原因來這個締造他們的:

平臺原因:不是所有的硬件平臺都能訪問任意地址上的任意數據的;某些硬件平臺只能在某些地址處取某些特定類型的數據,否則拋出硬件異常。

性能原因:中央大腦(CPU)訪問內存是有內存訪問粒度的,就是每次訪問內存的長度是固定的,如果不這樣做,那么中央大腦起需要訪問兩次內存,而對齊后只需要一次。

小強:嗯,明白了!那能給我說說這些工人在居住區為什么要不斷的搬遷呢?

3.3 成長

老頭:經過長時間的觀察,我發現每個工人的生命長短是不一樣的。所以我把居住區分為新生代,老年代,然后讓他們合理的搬遷,這樣能有效的利用空間而且讓垃圾小分隊工作更有效率。

 

圖文故事:一文帶你走進JVM的世界

 

堆區分代

工人誕生后會分配到Eden區,當Eden區人員快滿時,垃圾小分隊會來清掃,清掃后如果工人還活著,那么他們將搬遷至Survivor區中的其中一個,當這個Survivor快滿時,垃圾小分隊會將還活著的工人搬遷至另一個Survivor區中,就這樣重復著,每經歷一次垃圾小分隊的清掃,活著的工人就會長大一歲,直到工人的年齡達到15歲,到達后會將他們搬遷至老年代生活的地方。但也有例外,如果某個工人吃的太胖,新生代容不下他,那么他將直接去老年代住下。當老年代快住滿時,將會有垃圾大掃除(full gc)。

小強:原來如此啊!從此我再也不是只知道堆區棧區的菜鳥啦!哈哈哈哈……

老頭:小伙子,不要高興太早!你到目前為止所了解的仍是九牛一毛。

3.4 死亡證明

小強:如何確定工人是否到達生命的盡頭呢?

第一種:引用計數法

給每個工人添加一個引用計數器,就是只要有人需要這個工人幫忙,那么就給這個工人的計數加1,反之,別人不再需要這個工人的幫忙,那么計數就減1,直到這個計數為0,那么表示這個工人生命到了盡頭。

但這種方法有個問題:如果A工人和B工人相互需要幫忙,但沒有任何其他工人或任務需要他們兩個,那么他們兩個會永遠活下!「所以這種方法我們不會采取的。」

第二種:可達性分析法

我們找出被稱為 “GC roots”的工人作為起點,依次尋找他們工作中依賴的工人,這就可以知道哪些工人是沒有必要在存在下去了。

小強:我怎么知道哪些是 “GC roots”工人呢?

老頭:

工作區(棧)中的需要用到的工人

倉庫(方法區)中模板(類)本身需要的工人(靜態,常量)

世界后方(native方法)需要的工人

小強:Got it!

4. 回收

老頭:下面我帶你去認識一下垃圾小分隊的人物吧!不過在認識他們之前你最好了解一下,垃圾清除的基本方法論。

4.1 基本方法論

收集垃圾遵循的基本方法論有以下幾種:

  • 標記-清除首先標記出所有需要回收的工人(對象),在標記完成后統一回收所有被標記的工人。但這個有兩個缺點:1. 效率不高 2. 會產生許多碎片空間
  • 復制將可用的空間一分為二,每次只使用其中一塊,當快使用完時,小分隊回收,然后將活著的工人搬遷至另一塊。這雖然解決了標記-清除的效率問題,但此種方法卻縮小了一半空間。
  • 標記-整理首先標記出所有需要回收的工人(對象),然后將存活的工人移動到空間的一端,然后清理掉邊界以外的工人。

小強笑了笑:原來是這三種算法啊!我知道!

老頭:既然知道,那跟我來認識一下垃圾清掃隊的人吧!

4.2 主要成員

垃圾清掃隊有好幾個小隊組成,客戶喜歡哪個小隊可以指定讓誰來工作,他們各個隊伍的清掃方式各不相同也各有優劣。

我給你介紹一下兩個主要成員吧,CMS,G1兩個小隊出列。

CMS:到,我們是CMS分隊,全稱叫 “Concurrent Mark Sweep”,顧名思義,我們是采用標記清除算法的并發小分隊,我們以獲取最短回收停頓時間為目標。

小強:那你說說你們是如何工作的?

CMS:我們主要分四個步驟工作,1. 初始標記 2.并發標記 3.重新標記 4.并發清除

小強:算啦,這么多步驟太需要時間來了解了,我現在知道你的優點了,那你的缺點有什么呢?

CMS:這怎么還帶揭人傷疤的……

老頭這時嚴肅的咳嗽了兩聲,其意CMS立馬捕獲到了,委屈的說:

我有三個缺點:

  • 當資源不是很充足時,占用過多的資源,導致任務變慢
  • 無法處理浮動垃圾,我們清理的時候,工人同時也在工作,我們標記后,正好有些工人不在需要了
  • 我們分隊遵循的是“標記-清除”算法,所以會產生大量碎片空間,導致世界大掃除(full gc)提前到來

心直口快的小強來了句:原來你的問題這么嚴重,老頭竟然沒把你們小分隊辭掉……

CMS:你…… 想當年我們分隊可是紅極一時的……

那么我猜G1是不是可以彌補CMS的不足呢?

G1: 說實話,我們分隊的目標就是替換CMS分隊…… (JDK14 CMS正式落下帷幕)

小強不懷好意的笑了起來,哈哈……,CMS翻著白眼躲到一旁的角落暗自傷感去了。

 

CMS角落哭泣

小強:那G1說說你的能耐吧!

G1: 我們隊是基于標記整理算法的,因此不會產生大量碎片空間

  • 我們同時引入了分區的思路,弱化了分代的概念
  • 我們的停頓時間是可控的,可避免雪崩現象
  • 我們也能充分利用客戶給我們的資源,減少停頓時間

這是我們隊的優勢,接下來我給你詳細介紹下我們隊的情況……

小強:好的!你繼續……

回歸

就在小強聽的興趣濃濃時,天空中突然出現一只巨大無比的手向他襲來,小強躲閃不開,啊……

 

一只大巴掌

小強捂著自己的頭,有點恍惚,抬頭一看,擦,技術總監……你怎么也在這?

總監:我不在這我在哪?在家睡大覺嗎!

這時小強才回過神來,原來自己還在辦公室,大事不妙啊!

總監:小強,回家多爽,明天就不用來了吧!

小強一慌,腦袋靈機一動:總監,知道我剛才在做什么嗎?那可不是在睡覺,我有一個故事你且聽聽再做決定。

吧啦吧啦……

如果你覺得本文有不巧當之處,請留言告知,如果喜歡本文給個贊鼓勵一下。

 

責任編輯:武曉燕 來源: 碼上實戰
相關推薦

2023-11-03 15:05:41

2023-10-26 01:15:09

得物視頻優化

2020-06-24 12:01:16

Python數據類字符

2022-05-31 08:01:53

微前端巨石應用微服務

2019-10-11 08:41:35

JVM虛擬機語言

2021-09-08 17:42:45

JVM內存模型

2010-09-14 10:15:24

2020-01-07 14:43:26

JVM類加載器執行引擎

2021-01-27 11:10:49

JVM性能調優

2020-02-21 20:10:13

搞懂事務隔離級別

2023-07-31 08:18:50

Docker參數容器

2021-05-29 10:11:00

Kafa數據業務

2023-11-06 08:16:19

APM系統運維

2022-11-11 19:09:13

架構

2022-12-20 07:39:46

2023-11-20 08:18:49

Netty服務器

2023-12-21 17:11:21

Containerd管理工具命令行

2021-05-07 09:17:21

HTTPTCP協議

2020-05-17 14:55:17

物聯網安全技術

2019-06-13 21:31:19

AI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品久久久久久久久久久 | 精品国产欧美在线 | 成人欧美一区二区 | 日韩电影免费在线观看中文字幕 | 国内精品久久久久 | 亚洲精品www久久久 www.蜜桃av | 亚洲人的av| 99视频免费播放 | 国产精品一级 | 久久青青 | 久久99成人 | 久久av资源网 | 精品入口麻豆88视频 | 国产精品视频网 | 欧美精品一区在线发布 | 天天亚洲 | 欧美一级在线 | 成人免费在线网 | 国产香蕉视频 | 亚洲乱码国产乱码精品精98午夜 | 91免费视频观看 | 情侣酒店偷拍一区二区在线播放 | 亚洲高清视频在线观看 | 久精品久久 | 成人在线免费观看视频 | 综合久久av| 成人综合一区二区 | 91人人爽| 亚洲精品久久久久久宅男 | 亚洲成人免费网址 | 国产丝袜一区二区三区免费视频 | 99精品热视频 | 女人牲交视频一级毛片 | 日本网站在线看 | 中文字幕第一页在线 | 天堂网avav| 亚洲不卡在线视频 | 国产福利资源在线 | 91免费高清| 男人的天堂亚洲 | 久久偷人|