開發(fā)語言環(huán)境
JIT的基本原理
申請一塊既有寫權(quán)限又有執(zhí)行權(quán)限的內(nèi)存,然后把比較熱點的Java方法,翻譯成機器碼,寫入到這塊內(nèi)存里。當(dāng)再需要調(diào)用原來的Java方法時,就轉(zhuǎn)向調(diào)用這塊內(nèi)存。
“垃圾”回收算法的三個組成部分
具體的垃圾回收算法(如mark-sweep, mark-compact等)是內(nèi)存分配、垃圾識別和內(nèi)存回收三者結(jié)合。
對象布局(object layout)相關(guān)介紹
對象頭(header)有和GC相關(guān)的元數(shù)據(jù),也有和語言相關(guān)的元數(shù)據(jù),可有可無,和具體語言、虛擬機有關(guān),元數(shù)據(jù)可以集中放在一塊特定區(qū)域;字段(field,也叫“域”);運行時(虛擬機)有能力識別對象哪些字段是值,哪些字段是引用。
根集合(root set)具體包含什么?
根集合中的引用可以被應(yīng)用程序直接訪問,因此根指向的對象都是活的。具體包括:局部變量、靜態(tài)(全局)變量、被外部接口保留的、例如JNI的LocalRef等、其他根、由語言、虛擬機、運行環(huán)境定義。
類型對象全景圖
以代表列表的list對象為例,ListKlass既要能充當(dāng)類型的功能,又要充當(dāng)對象的功能,最直觀的辦法就是為ListKlass關(guān)聯(lián)一個普通對象,這個對象被稱為TypeObject。
動態(tài)類型和弱類型相關(guān)介紹
動態(tài)類型是指變量在聲明時不指定類型,可以使用任意的值為該變量賦值。而且對象往往可以在運行時增加或者刪除某一個成員變量。弱類型是指在某一種語言中不存在類型的概念。Python實際上是強類型的,也就是說它的變量都是有類型的。
Klass的有什么作用?
同一類對象的Klass指針都會指向同一個Klass對象。例如所有的整數(shù)對象的指針都會指向IntegerKlass。通過這個指針可以區(qū)分對象類型。
什么是Klass和Oop?
Python源代碼里缺少類型信息,更加完全依賴于對象類型識別機制;即使C++做為靜態(tài)語言的代表,也依賴虛表指針進行dynamic_cast時的類型檢查Klass機制。
什么是語言虛擬機?
虛擬機(Virtual Machine)是一種軟件對硬件的模擬實現(xiàn)。這個專用名詞被使用在兩個場景,一個是指整機虛擬機(例如VM Ware),另一個是編程語言虛擬機(例如JVM, Python VM)。