學習Java虛擬機沒用? 聽聽當事人是怎么說的!

姓名:牛康 ?學號:17101223416

轉(zhuǎn)載自:https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513667&idx=1&sn=26d2585a465a0cce1595b88a0fe959b3&chksm=80d67a80b7a1f39643d16fab2174a6048359a1f161ff882d6172178eabe22c3584c0f6e82579&scene=38#wechat_redirect

【嵌牛導讀】:大名鼎鼎的Java 虛擬機,據(jù)說這個星球上每天有900多萬程序員和它打交道,這真是一個驚人的數(shù)字。這900多萬人中不少人對它的技術內(nèi)幕非常感興趣,有事兒沒事兒都要把它“大卸八塊”,接下來,我們用JVM的自白來了解它。

【嵌牛鼻子】:JVM

【嵌牛提問】:JVM是怎么完成你交給它的任務的呢?

【嵌牛正文】:

我是java虛擬機,也可以叫我JVM。有很多人對我的運行機理愛理不理, 理由很簡單: Java虛擬機相關的事情只有在面試時才會問道,背誦一下那些垃圾回收算法,應付過去就可以了!

真的是這樣嗎? ?面試官為什么喜歡問JVM原理? 難道他們沒什么可問的了? 或者是只是為了展示他們的卓爾不群? 高人一等?壓你一頭?

我想都不是, ?請注意一下我的名字: Java虛擬機, ?我是一個虛擬機??!

雖然不是像VMWare, VirtualBox那樣可以完全虛擬出一個包括內(nèi)存,硬盤,CPU的硬件計算機出來, 我至少也是個Soft CPU啊, 有自己的指令集,有自己獨有的可執(zhí)行文件格式, 有自己獨特的基于棧而不是寄存器的執(zhí)行方式,還有那久經(jīng)考驗的垃圾回收機制......

作為一個口口聲聲說熱愛編程,立志有寫出偉大軟件來改變世界的程序員, 少年, 難道你竟然對這么有趣的東西視而不見?

對軟件技術的好奇心是你最終成為偉大程序員的第一驅(qū)動力, 如果你對技術不愿意深究, 不愿意了解背后的原理,如果你不愿意像一個調(diào)皮搗蛋的熊孩子那樣把一個玩具變成零件,然后再組裝起來(嗯, 實際上永遠都組裝不起來了) , 我真的懷疑你在這個行業(yè)能呆多久,走多遠。

我剛才提到了有趣, 那真的有用嗎?

表面上看是沒有用處的,至少短期看來是沒有用處的, 你寫程序,運行程序,然后吃飯,睡覺。

管你什么基于棧的虛擬機,什么方法區(qū),堆, 垃圾回收, ?生活很美好,世界也很大, 我想去看看, 不要用這些煩心事來煩我。

如果你想一直生活在軟件開發(fā)的表層, 那肯定是沒有問題的, 如果你想像Neo那樣,把這個世界看個清清楚楚,明明白白,真真切切, 就需要修煉一下內(nèi)力, 做為Java 程序員, 理解Java虛擬機就是那個扎馬步的基本功。

舉個例子, 理解Class 文件格式, 就能理解ASM是怎么在運行時“艱難的”動態(tài)生成字節(jié)碼的, 然后就會知道CGLib是怎么改善它, 讓它容易使用的。 ?而CGLib可是Spring AOP賴以生存的一大基礎啊。 這一路走來,是不是對AOP的理解更加透徹了?

你腦海中甚至能想象出來字節(jié)碼怎么被動態(tài)的創(chuàng)建,被Classloader 加載, 形成新的Class, ? 然后對你的業(yè)務類進行攔截的過程。

看透世界的感覺不要太爽,如果你非要說我會用Spring 的AOP就行了, 那我也沒辦法, 人各有志嘛。

擴展一下, 現(xiàn)在我的家中上入住了不少動態(tài)語言, Jython, JRuby , Clojure , Scala 等等, 他們可都需要動態(tài)的生成字節(jié)碼來運行?。ùa農(nóng)翻身備注: Scala 也可以直接編譯成class 文件), 你看看理解了Class 文件格式得有多大的好處。

還有啊, 理解了一些重要的字節(jié)碼指令以后,你就會知道所謂的面向?qū)ο螅?尤其是你寫的那些個漂亮的OO代碼, 在我這里已經(jīng)“退化”成函數(shù)調(diào)用了, 不知道你會不會沮喪, 但是沒有辦法, 咱們計算機的本質(zhì)就是這樣,順序,循環(huán),分支, 函數(shù)調(diào)用。 作為補償, 我會讓你了解多態(tài)的秘密, 這可是很多面向?qū)ο笳Z言的基礎。

說到函數(shù)調(diào)用, 你寫的Java程序在運行時會形成的棧幀, 這可真是一個超級重要的概念, 不僅在我這里有,物理CPU和內(nèi)存在運行本地代碼的時候也有,雖然我和他們的結(jié)構不同, 但都是為了完成一個目的: ?表達一個函數(shù)在運行時的結(jié)構。

了解了這個家伙, 你就知道函數(shù)在機器級是怎么調(diào)用的, 參數(shù)是怎么傳遞的, 遞歸是怎么回事, 尾遞歸是怎么回事(我竟然不支持!) 。 ?也許你會跑去看看匯編, 去看看緩沖區(qū)溢出攻擊, 各種知識點開始連接,形成一張大網(wǎng),這種感覺是極爽的。

這樣的例子我還可以舉出很多,但是估計很多人已經(jīng)不耐煩了,就此打住。

你們?nèi)祟愓f計算機是門科學, 但是科學的成分在哪里呢? ?在我看來更像一門工程或者技術, ?核心的基礎概念真的不多, 花點功夫把他們掌握了,受益終生。

前些天我偷偷地閱讀了你們的小說《天龍八部》, 里邊的掃地僧可真是厲害, 輕輕松松就把慕容博和蕭遠山兩位絕頂高手制得服服帖帖,老老實實, 這說明的什么問題? 內(nèi)功的修煉真是很重要啊。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,820評論 11 349
  • 姓名:周君會 學號:17011210526 轉(zhuǎn)載自: http://www.itdecent.cn/p/...
    lotus兒閱讀 2,128評論 1 9
  • 《深入理解Java虛擬機》筆記_第一遍 先取看完這本書(JVM)后必須掌握的部分。 第一部分 走近 Java 從傳...
    xiaogmail閱讀 5,476評論 1 34
  • 一片迷霧,窗外一片迷霧,小花園看不到了,鳥兒看不到了,秋海棠看不到了,疾馳的車聲似乎也溫柔了很多,全都裹狹在這濃濃...
    醉月光閱讀 212評論 0 0
  • 埃及故事 現(xiàn)在想想在埃及剛開始的一個月,真的覺得不可思...
    ayao001閱讀 456評論 0 0

友情鏈接更多精彩內(nèi)容