原创 kvm垃圾收集-008-更新對象引用

本文介紹在壓縮內存後更新對象引用的代碼,這部分的代碼如下: // 修改指針 updateRootObjects(&currentTable); updateHeapObjects(&currentTable, 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