學習Java虛擬機器沒用? 聽聽當事人是怎麼說的!(skycto JEEditor)
原文連結:https://mp.weixin.qq.com/s/Sx1IvZk25i6-z4V3a2TAXQ
轉自:碼農翻身(微訊號:coderising)
我是大名鼎鼎的Java 虛擬機器, 據說這個星球上每天有900多萬程式設計師和我打交道,這真是一個驚人的數字。 這900多萬人中不少人對我的技術內幕非常感興趣, 有事兒沒事兒都要把我“大卸八塊”, 深入瞭解一下。甚至還有人從我的出生地--原始碼--開始看起,弄得人家連一點隱私都沒有了。
當然也有很多人對我的執行機理愛理不理, 理由很簡單: Java虛擬機器相關的事情只有在面試時才會問道,背誦一下那些垃圾回收演算法,應付過去就可以了!
真的是這樣嗎? 面試官為什麼喜歡問JVM原理? 難道他們沒什麼可問的了? 或者是隻是為了展示他們的卓爾不群? 高人一等?壓你一頭?
我想都不是, 請注意一下我的名字: Java虛擬機器, 我是一個虛擬機器啊!
雖然不是像VMWare, VirtualBox那樣可以完全虛擬出一個包括記憶體,硬碟,CPU的硬體計算機出來, 我至少也是個Soft CPU啊, 有自己的指令集,有自己獨有的可執行檔案格式, 有自己獨特的基於棧而不是暫存器的執行方式,還有那久經考驗的垃圾回收機制......
作為一個口口聲聲說熱愛程式設計,立志有寫出偉大軟體來改變世界的程式設計師, 少年, 難道你竟然對這麼有趣的東西視而不見?
對軟體技術的好奇心是你最終成為偉大程式設計師的第一驅動力, 如果你對技術不願意深究, 不願意瞭解背後的原理,如果你不願意像一個調皮搗蛋的熊孩子那樣把一個玩具變成零件,然後再組裝起來(嗯, 實際上永遠都組裝不起來了) , 我真的懷疑你在這個行業能呆多久,走多遠。
我剛才提到了有趣, 那真的有用嗎?
表面上看是沒有用處的,至少短期看來是沒有用處的, 你寫程式,執行程式,然後吃飯,睡覺。
管你什麼基於棧的虛擬機器,什麼方法區,堆, 垃圾回收, 生活很美好,世界也很大, 我想去看看, 不要用這些煩心事來煩我。
如果你想一直生活在軟體開發的表層, 那肯定是沒有問題的, 如果你想像Neo那樣,把這個世界看個清清楚楚,明明白白,真真切切, 就需要修煉一下內力, 做為Java 程式設計師, 理解Java虛擬機器就是那個扎馬步的基本功。
舉個例子, 理解Class 檔案格式, 就能理解ASM是怎麼在執行時“艱難的”動態生成位元組碼的, 然後就會知道CGLib是怎麼改善它, 讓它容易使用的。 而CGLib可是Spring AOP賴以生存的一大基礎啊。 這一路走來,是不是對AOP的理解更加透徹了?
你腦海中甚至能想象出來位元組碼怎麼被動態的建立,被Classloader 載入, 形成新的Class, 然後對你的業務類進行攔截的過程。
看透世界的感覺不要太爽, 如果你非要說我會用Spring 的AOP就行了, 那我也沒辦法, 人各有志嘛。
擴充套件一下, 現在我的家中上入住了不少動態語言, Jython, JRuby , Clojure , Scala 等等, 他們可都需要動態的生成位元組碼來執行啊(碼農翻身備註: Scala 也可以直接編譯成class 檔案), 你看看理解了Class 檔案格式得有多大的好處。
還有啊, 理解了一些重要的位元組碼指令以後,你就會知道所謂的物件導向, 尤其是你寫的那些個漂亮的OO程式碼, 在我這裡已經“退化”成函式呼叫了, 不知道你會不會沮喪, 但是沒有辦法, 我們們計算機的本質就是這樣,順序,迴圈,分支, 函式呼叫。 作為補償, 我會讓你瞭解多型的秘密, 這可是很多物件導向語言的基礎。
說到函式呼叫, 你寫的Java程式在執行時會形成的 棧幀, 這可真是一個超級重要的概念, 不僅在我這裡有,物理CPU和記憶體在執行原生程式碼的時候也有,雖然我和他們的結構不同, 但都是為了完成一個目的: 表達一個函式在執行時的結構。
瞭解了這個傢伙, 你就知道函式在機器級是怎麼呼叫的, 引數是怎麼傳遞的, 遞迴是怎麼回事, 尾遞迴是怎麼回事(我竟然不支援!) 。 也許你會跑去看看彙編, 去看看緩衝區溢位攻擊, 各種知識點開始連線,形成一張大網,這種感覺是極爽的。
這樣的例子我還可以舉出很多,但是估計很多人已經不耐煩了,就此打住。
你們人類說計算機是門科學, 但是科學的成分在哪裡呢? 在我看來更像一門工程或者技術, 核心的基礎概念真的不多, 花點功夫把他們掌握了,受益終生。
前些天我偷偷地閱讀了你們的小說《天龍八部》, 裡邊的掃地僧可真是厲害, 輕輕鬆鬆就把慕容博和蕭遠山兩位絕頂高手製得服服帖帖,老老實實, 這說明的什麼問題? 內功的修煉真是很重要啊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947338/viewspace-2656818/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VueJS&&ReactJS如何?聽聽別人怎麼說。VueJSReact
- Java虛擬機器是怎麼實現synchronized的Java虛擬機synchronized
- 雲端計算儲存之什麼是Ceph?聽聽Ceph創始人怎麼說
- 聽說"快應用"了沒?
- Java虛擬機器是什麼?Java虛擬機
- 沒有“好的”資料,AI就沒有未來?聽聽雲測資料怎麼說AI
- 遊戲交友是社交的匱乏還是繁榮?聽聽這些大學生怎麼說遊戲
- 來聽聽達摩院技術專家是怎麼講智慧外呼機器人技術機器人
- Map集合(Java基礎、skycto JEEditor)Java
- JAVA虛擬機器學習筆記Java虛擬機機器學習筆記
- 恐怖遊戲的當下和未來?來聽聽Gamera和製作人們怎麼說遊戲GAM
- 深入學習Java虛擬機器——虛擬機器位元組碼執行引擎Java虛擬機
- 如何成為一名資料科學家?聽聽來自Netfix的老司機怎麼說資料科學
- 全面佈局安全可靠 聽聽東軟怎麼說!
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- 公益直播課|遠離勒索病毒,聽聽專家怎麼說
- 機器人的這十項核心技術你聽說過哪些?機器人
- 虛擬機器上學習Linux運維?學linux有什麼用虛擬機Linux運維
- java虛擬機器和Dalvik虛擬機器Java虛擬機
- Android 虛擬機器 Vs Java 虛擬機器Android虛擬機Java
- win10虛擬機器沒聲音怎麼辦_win10Hyper虛擬機器沒聲音如何恢復Win10虛擬機
- 深入java虛擬機器學習–類的載入機制(四)Java虛擬機機器學習
- React 和 Vue 到底誰更牛?聽聽尤雨溪怎麼說ReactVue
- Java中文分片語件 - word分詞(skycto JEEditor)Java分詞
- 聽說同學你搞不懂Java的LinkedHashMap,可笑JavaHashMap
- 學習筆記-虛擬機器筆記虛擬機
- 聽,是版本在說話
- 什麼是linux虛擬機器?如何安裝?Linux學習入門!Linux虛擬機
- 寫給Java程式設計師的Java虛擬機器學習指南Java程式設計師虛擬機機器學習
- 聽筒播放請貼近手機聆聽怎麼取消?
- 五分鐘學Java:如何學習Java面試必考的JVM虛擬機器Java面試JVM虛擬機
- Java虛擬機器記憶體模型學習筆記Java虛擬機記憶體模型筆記
- 深入學習Java虛擬機器——類檔案結構Java虛擬機
- final關鍵字的作用(skycto JEEditor)
- hashCode()和equals()的區別?(skycto JEEditor)
- final、finally、finalize()的區別(skycto JEEditor)
- 機器學習用java還是python?機器學習JavaPython
- 總是聽到有人說AndroidX,到底什麼是AndroidX?Android