原创 kvm垃圾收集-008-更新對象引用
本文介紹在壓縮內存後更新對象引用的代碼,這部分的代碼如下: // 修改指針 updateRootObjects(¤tTable); updateHeapObjects(¤tTable, freeStart)
原创 kvm線程-007-線程狀態-THREAD_SUSPENDED,THREAD_DEAD
本文介紹線程狀態THREAD_SUSPENDED,THREAD_DEAD的使用。 THREAD_SUSPENDE 該狀態設置的地方爲: startThread,該方法在kvm線程-006-線程狀態-THREAD_ACTIVE 中
原创 kvm垃圾收集-003
本文介紹在kvm中垃圾收集的實際實現,其方法名爲garbageCollectForReal.其代碼如下: void garbageCollectForReal(int realSize) { CHUNK firstFree
原创 kvm free chunk list
在kvm內部中在分配內飾時使用了free chunk list.其定義如下: struct chunkStruct { long size; /* 當前chunk的大小,不包含該字段 */ CHUNK
原创 kvm終止流程
本文介紹KVM的終止流程.其是在StartJVM方法中調用的.代碼如下: int StartJVM(int argc, char* argv[]) { volatile int returnValue = 0;
原创 kvm-inlineCache
本文來詳細介紹kvm中的inlineCache. 其定義如下: struct icacheStruct { cell* contents; /* 指向實際要執行方法 */ BYTE* codeLoc; /
原创 kvm解釋器-004
本文介紹主類main方法執行的過程.其字節碼如下: 另外,此處主類反編譯後的結果如下: # 參數 hejiarui$ javap -v -l -p -c -s -constants KVMTest.class Classfile
原创 kvm解釋器-003
本文繼續介紹kvm中解釋執行的步驟.接上文,目前棧中的情況如圖所示: 初始化Thread 此處初始化的步驟和上文中介紹的一樣,也是調用runClinit方法.首先設置初始化線程爲CurrentThread,然後由於其父類Obje
原创 kvm解釋器-002
在JAVA虛擬機規範(JAVA SE 7 )中,針對初始化的過程有如下的定義: 每個類或接口C,都有一個唯一的初始化鎖LC。如何實現從C到LC的映射可由Java虛擬機實現自行決定。例如,LC可以是C的Class對象,或者是與Cla
原创 kvm啓動流程-006
本文介紹kvm啓動過程中比較複雜的步驟,初始化多線程系統與初始化系統類 初始化多線程系統 此處的代碼如下: void InitializeThreading(INSTANCE_CLASS mainClass, ARRAY argu
原创 kvm解釋器-001
從本文開始接受kvm中解釋器是如何執行的流程.以一個例子來進行說明,如下: public class KVMTest{ public static void main(String[] args){
原创 kvm啓動流程-002
本文介紹初始化內存系統的代碼.該方法定義如下: void InitializeMemoryManagement(void) { int index; gcInProgress = 0;// 是否gc在執行過程中
原创 kvm啓動流程-004
本文介紹kvm啓動過程中的初始化class-path table,初始化VM所需要的內部類. 初始化class-path table 此處的代碼如下: void InitializeClassLoading() { cha
原创 kvm啓動流程-005
寫在前面 這是本人的第100篇博文,隨着不斷的看源碼,不知不覺已有這麼多… 前言 kvm在啓動時的步驟如下: 創建ROM鏡像,此處爲宏,定義在j2me_cldc/kvm/VmCommon/h/garbage.h 初始化FPU 初
原创 kvm啓動流程-003
kvm在啓動時的步驟如下: 創建ROM鏡像,此處爲宏,定義在j2me_cldc/kvm/VmCommon/h/garbage.h 初始化FPU 初始化異步I/0系統 初始化本地代碼 初始化vm,此處爲宏,定義在j2me_cldc