要開發一個jvm需要哪些知識?
01-02
JVM的基本結構如下:
需要具備的知識包括但不僅限於
通用
操作系統、編譯器的基本知識,對process virtual machine/runtime system/interpreter有基本的了解,interpreter、compiler以及混合模型設計的初衷的各自優缺點;Java語言特性專用- 對CPU和內存的虛擬,即實現stack machine和存放對象的堆區,存放call stack的棧區,存放元數據的方法區,如果要支持native method,還需要有native stack。線程調度的話,可以把Java線程直接映射為操作系統線程,把調度的任務留給操作系統
- class文件結構,類載入器,這就需要你翻看JVM規範手冊,了解如何解析類
- 對象的表示機制,即如何在內存中表示一個類和類的對象,可以參考Hotspot的oop-klass模型
- 函數的分發機制,vtable、itable;異常處理的實現,exception table
- 各類GC演算法,至少要知道引用計數、mark-sweep、generational GC
- 解釋器和即時編譯器,各類代碼優化演算法,code cache,如何實現簡單的JIT policy (代碼優化和JIT是重點)
實際操作
先不要考慮支持類,挑一些簡單的指令,實現 stack machine,自己玩下各種局部的或者跨函數的代碼優化,支持下簡單的 JIT 策略;再想想如何支持類,完成類的解析、verify、載入,以及在虛擬機中的數據結構,然後實現類相關的各種語言功能,介面多態分發繼承什麼的;最後實現一個簡單的 Mark Sweep GC---------------------------------以上回答太過草率,目前正積極開發一個學慣用的JVM,體會到了更多的小九九,待更新一個系統的回答。推薦閱讀:
※學習C++,關於小項目練手的問題總是感覺不知道從哪入手?
※有哪些go或c++框架可以完整模擬瀏覽器訪問網頁所涉及的全部元素?
※現代編譯器是如何實現自定義函數在main()函數之後實現的呢?
※C++ 「==」運算符取值問題?
※每次編程開始先輸入 #include,那麼計算機在讀取 # 符號的時候 正在做什麼?
TAG:編程 | Java | Java虛擬機JVM | CC |