JVM帝国一日游【穿越小说】
????????就在學習Java的第一天,環境搭建一切進展順利,idea中小心翼翼創建類名為HelloWorld的java文件,并一字一句敲下main函數,main方法里寫下System.out.print("Hello World")。接著膽戰心驚的Run as JavaApplication..控制臺出現....
? ? ? ? 盯著這行Hello Word...忽然眼前一片漆黑,接著刺眼的綠光閃過——
????????下意識閉上眼睛,等睜開眼睛,眼前的場景令我震驚.......
? ? ? ? ?“這是——”我剛張嘴,旁邊一個工作人員說:“歡迎來到JVM帝國,有什么疑惑我可以為你解答?!?/p>
? ? ? ? “我怎么會到這里?”
? ? ? ? “凡是System.out.print("Hello World")人類都有機會到此一游?!?/p>
? ? ? ? ......
? ? ? ? 無語之時,只見幾個🥷黑衣人手舉一堆數字和英文字符匆匆走過。
? ? ? ? 我十分好奇問道:“這拿的是什么?”
? ? ? ? “噢,新送進來的字節碼文件,他們要被使用了,正在做些準備工作?!?/p>
? ? ? ? “莫非....這黑衣人🥷大哥是類加載器?”我瞪圓眼睛問道。
? ? ? ? “正是...”
? ? ? ? 沒等工作人員話音落下,我已經沖過去拉住黑衣大哥的手:“類加載器大哥,受小弟一拜。”怎奈黑衣大哥力大無窮,不但沒有被我攔住,反而把我順勢帶進了一個大空間,里面復雜而有序的滾動著代碼。
? ? ? ? “大哥,這是哪啊?”
? ? ? ? “堆空間”。黑衣人就是黑衣人,很冷酷嘛。
? ? ? ? 只見黑衣大哥們把字節碼文件放到了堆空間一個小空間中,工作人員接過字節碼文件換了標簽并把一串地址交給了黑衣人大哥,我一看——“class對象”,黑衣人大哥轉身要走,我喊道:“你去哪里?”
? ? ? ? “地址交回方法區。”我心想方法區又是哪里啊,我要不要跟他走.....
? ? ? ? 堆空間的工作人員他們開始逐字檢查著,并用對講機說到:“驗證通過。”對講機里傳來熟悉的黑衣人大哥的聲音:“收到。解析完成,方法區符號引用已轉直接引用?!?/p>
? ? ? ? 感嘆這工作效率真是緊促又縝密,沒等我多想,對講機里傳來陌生的聲音:“接到new指令,對象逃逸”。我問工作人員:“對象逃跑了?”
? ? ? ? “逃逸是逃逸分析,創建對象分配內存前,分析發現需創建的此對象有被其它對象引用,因此不能在線程棧中分配內存,要到堆來為此創建的對象分配內存空間?!惫ぷ魅藛T耐心解釋道。
? ? ? ? 我不禁杠了起來:“放棧里會怎樣?”
? ? ? ? “線程銷毀,棧會隨之釋放,對象會丟了,如何向其它引用此對象的對象們負責呢?”
? ? ? ? 我頻頻點頭嘀咕道:“如果我有對象要把對象放堆里,這樣對象就不會丟啦!”沾沾自喜時我看到工作人員從class對象中取出部分信息轉身到一處全是對象的地方又劃分了一塊空間放入這個新生對象,隨后把指針挪到了這個對象之后。我說:“這里的對象排列很整齊耶?!?/p>
????????工作人員解釋道:“放對象的空間都是整理過的?!蔽宜贫嵌c了頭。
????????隨即看工作人員在加工這個對象,我問:“在加工對象嗎?”
? ? ? ? “我在設置對象頭?!蔽覝愡^去一看......這也不是個正常的頭👴🏼啊......
? ? ? ? “這么長的對象頭!頭真大”,我正嘮叨,工作人員說不可小瞧這對象頭,除了填充的占位無所事事,其它記錄著重要信息。
? ? ? ? “舉個栗子🌰呢?”
? ? ? ? “記錄了分代年齡,鎖信息,hashcode...且不同狀態信息變化多端?!边@么大對象頭令我頭大。
? ? ? ? “對象有年齡?”我挑了一個我聽懂的詞發問。
? ? ? ? “等下GC來了你就知道了?!惫ぷ魅藛T提到GC,我不禁想到Gucci還是GD還是哪個說唱組合。
? ? ? ? 雖然陪著我閑聊,但是工作人員手里的工作并沒有停下,一會兒的功夫就叫來一年輕小伙子,工作制服上胸牌戴著<init>。一頓操作猛如虎,又是賦值又是執行靜態代碼塊又是執行構造方法....一問工資3500。我說和我差不多嘛,人家說美元。我說打擾了。
? ? ? ? 一位身著橙色背心戰士讓我挪下腳,我小心翼翼往旁邊站了站,只見他修改了對象頭,我不知哪來的自信伸手去阻攔:“這對象頭存著重要信息,可不能亂動啊!”這大哥扭過頭來嚇我一跳!左G右C大紋身胸口紋著“garbage collection”
? ? ? ? “誠不欺我!GC來了!”我轉頭對工作人員說道。并向工作人員打小報告:“我看GC動了對象頭信息!”
? ? ? ? “沒錯,GC經過一次,對象年齡就會+1。”我恍然大悟,這對象轉眼間就一歲啦!“那對象能活幾歲呀?”
? ? ? ? GC大哥驕傲的亮出他的胸牌——“Parallel Scavenge”,
????????“平行打掃?跟誰平行呢?”
? ? ? ? GC大哥用下巴指給我遠處,哇,好多橙色背心GC大哥們,這是團伙啊。這GC大哥沒有回答我對象能活多大,是不是記仇啊,不行,我要自己破案!
????????那些大哥手捧對象穿越一道橙色光門,我一溜小跑追過去看那個被公主抱的對象多大歲數了......15歲?小小年紀就喪生了,悲從心頭涌現出來,我說“好可惜,英年早逝”
? ? ? ? “沒死呢!”只見那被GC大哥公主抱的對象懟我。
? ? ? ? 我為了表示感恩,搭把手一起抬著對象走出去,實際是好奇橙色光門里面是什么......
? ? ? ? 進去才發現,比剛才的空間小多了,不禁失望。工作人員解釋道:“survivor區域確實只占了堆空間的1/3的1/5。”我又迷糊了,那這么說剛才那是堆空間的1/3的1/5?
? ? ? ? 工作人員對我們的對話感到好笑,說:“是的,堆空間的年輕代占堆的1/3,你剛剛在的eden區又占年輕代的4/5?!?/p>
? ? ? ? “搞這么麻煩圖啥呀?”一著急東北話說出來了。
? ? ? ? “就當是為了GC方便吧!”工作人員微笑欲言又止。
? ? ? ? “對了,剛一個對象跟我說他沒死耶,那他幾歲會死掉?”
? ? ? ? 工作人員說:“這可要從三色標記算法說起,GCRoot也就是線程棧里方法引用對象為根結點向下遍歷,如果所有引用都遍歷到了標記為黑色,如果至少有一個沒遍歷到就是灰色,如果沒有引用那就是白色?!?/p>
? ? ? ? 不知怎么的,聽見算法二字耳朵好像就會堵,后面說什么我沒聽清,但還是假裝懂了迎合道:“果然不是非黑即白的世界?!彼坪鯇ο蟮拇嫱雠c年齡無關,與對他的引用有關。
? ? ? ? “我想去你們這豪華包間看一看!”我充滿暢想的提出要求。
? ? ? ? 沒走幾步,就到了old區,那個傳說占了堆空間2/3的豪華包間。大失所望,Parallel Scavenge Old老年組圍著一些老年對象,清除整理。無趣。
? ? ? ? 我問到:“類加載器大哥去的那個方法區和這里也類似嗎?你們這有沒有刺激一點的地方?”
? ? ? ? 工作人員搖搖頭,引路帶我去了線程??臻g。
? ? ? ? 我參觀著這里,有個八抓魚一樣的他叫程序計數器,還有一塊專門區域牌匾寫著“本地方法?!笨戳丝礂@锏木植孔兞勘怼討B鏈接......咦?有個紙條,我拿起一看,上面寫著:“出棧指令”,還沒明白怎么回事,就被彈飛了,越飛越快速度驚人嚇得我下意識閉上眼睛。
? ? ? ? 再睜開眼,咦?
????????
????????????????
????????
總結
以上是生活随笔為你收集整理的JVM帝国一日游【穿越小说】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上银驱动器使用手册_D1驱动器操作使用手
- 下一篇: 静电场问题的解法