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