介紹了Reflection, JNI, JIT
Reflection是一種相當重要的機制,有點像是DLL
能夠在動態取得類別物件的資訊並產生新的物件
有點抽象,以Java而言其參考並不是像C++這樣指向記憶體
為了能夠作garbage collection他至少跳了兩次
先指向一個固定size的欄位,這個欄位放在一個表格
這個表格由一個GC執行緒管理, 這個欄位至少有指向兩個東西
一個是這個物件的資料(code seg, data seg),另一個欄位指向一個特殊的class
"Class",這個class(注意大小寫),儲存了關於這個class的Method, Filed, Superclass, Interface訊息及Static成員資料,相同類別的物件都指向這個Class
使用Class.forName(String)這個方法可以將class檔動態載入,取得其資訊
在利用Class.newInstance方法產生物件,預設是沒有建構參數,有的話要多一些手續
Reflection加上介面抽象化很容易便可以設計一個相當flexible的系統
像是Applet, RMI, IDL, Beans...
Simple Factory Design Pattern + Reflection 更能發揮其power
JNI則是C/C++與Java程式溝通的方法
透過JVM提供的一些方式呼叫/被呼叫Java函式
沒什麼道理,就是這樣用而已,知道有這個東西就好,非必要不要碰
JIT(Just in Time Compile)是一個相當重要的概念
JVM將class檔load到資料結構後,JVM其實就是用C/C++實作的
開始執行時將一部分bytecode翻譯成native code,這個地方牽涉到許多最佳化的問題
一開始是one by one mapping, 從byecode to Assembly,所花的時間是線性的
但是當一段code被執行的次數增多(JVM通常會去profileing)
會多花一些時間進行Compiler這段code以減少cpu cycle
2008年4月23日 星期三
昨天上課
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言