原创 kvm垃圾收集-001

kvm中的垃圾收集算法是基於Cheney的elegant copying collector而來.儘管該收集器有很多好處(特別是,它使用迭代而不是遞歸算法來收集對象).但它有複製收集器的一般問題,因爲它需要比程序實際使用的內存空間

原创 kvm對象頭

在之前的文章中,簡要說了一下kvm中的對象頭,kvm中的對象頭和jvm中的不完全相同.本文進行詳細介紹. 在我們的VM中,內存中的每個堆分配結構前面都有一個對象頭,它提供關於對象類型和大小的詳細信息。頭的長度是一個字(32位)。

原创 kvm垃圾收集-002

本文我們來介紹kvm中的垃圾收集器的實現.其算法爲mark-and-sweep(含有壓縮功能).其方法爲garbageCollect.代碼如下: void garbageCollect(int moreMemory) { #if

原创 eclipse設置總結

eclipse設置總結 說明 本人應該可以算是個老碼農,對於IDE方面,一直使用的是eclipse.沒有使用過idea開發(只是用其看過源碼,如spark,kafka). 寫本文的目的是,當我以後換電腦,更換工作環境時,對於ecl

原创 kvm線程-001

KVM具有獨立於機器的、可移植的線程模型,可以獨立於Java語言運行. 其變化如下: 1.0之前 使用了一個簡單的循環調度模型,其中系統中的所有活動線程都存儲在循環列表中. 列表中的線程根據每個任務的Java級優先級,一個接一個地

原创 kvm線程-003

本文介紹kvm中關於線程操作中的下列函數: registerAlarm checkTimerQueue removePendingAlarm 這三個函數,涉及到了一個隊列–TimerQueue.其定義如下: THREAD Tim

原创 kvm線程-006-線程狀態-THREAD_ACTIVE

本文介紹線程狀態THREAD_ACTIVE的使用.設置線程狀態THREAD_ACTIVE的地方有: InitializeThreading,這點在kvm啓動流程-006 中有詳細介紹. resumeThread,其代碼如下

原创 kvm垃圾收集-005

本文介紹garbageCollectForReal中的第3步–markWeakPointerLists,第4步–markWeakReferences. markWeakPointerLists 其代碼如下: static void

原创 kvm線程-004-線程切換

本文介紹kvm中線程切換的實現. 通過kvm線程-001的介紹.可以得到如下事實: 對於通過new Thread() 創建的線程,其分配的時間片爲:priority * 1000.其代碼如下: void Java_ja

原创 kvm垃圾收集-006

本文介紹kvm中垃圾收集中的sweep.sweep的意思是: 將垃圾對象清除(其實垃圾區域的對象還是存在的,但是由於沒有對象引用,同時之後在分配對象時,會在這些區域分配,分配時會進行清零操作.因此,也就表現爲實際清除了一樣)。此處

原创 kvm線程-005-線程狀態-THREAD_JUST_BORN

在kvm內部定義了線程狀態,如下: enum { THREAD_JUST_BORN = 1, /* 還沒有啓動*/ THREAD_ACTIVE = 2, /* 當前正在運

原创 kvm垃圾收集-壓縮算法實現,獨家

本文介紹kvm中垃圾收集算法中的壓縮部分. 這裏涉及到BreakTable 這麼一個數據結構,BreakTable的每個表項對應於在garbage collector進行compating的過程中每個被移動了的object,每個表

原创 kvm 本地方法實現

本文介紹kvm中本地方法的實現. 在j2me_cldc/kvm/VmCommon/h/native.h中有如下定義: typedef void NativeFunctionType(void); typedef NativeFun

原创 kvm垃圾收集-004

本文介紹garbageCollectForReal方法中的第二步–markNonRootObjects. 該方法的功能是掃描堆中存活對象,將其所引用的對象標記爲存活. 該方法使用了尾遞歸的方式掃描整個堆.同時爲了防止遞歸次數過多,

原创 kvm線程-002

kvm在內部定義了很多方法來操作線程,如下: /* 線程的構造 */ void InitializeThreading(INSTANCE_CLASS, ARRAY); THREAD getVMthread(JAVATH