·您的位置: 首页 » 资源教程 » 编程开发 » JAVA、JSP » 浅谈JAVA VM 发展

浅谈JAVA VM 发展

类别: JAVA教程  评论数:0 总得分:0
?/?? Java VM 办展
Jim Huang <jimchyun @ ccns.ncku.edu.tw>
<jserv @ kaffe.org>

略?檎?理剐者?? Java VM ??作的心得,陪衷位分享,在本文後半部???W㈧度舾?
Open Source Java VM ?0傅奶接?,剐者本身是 KaffeVM [1] 檫办者,很希望本文
能??看倌有所?椭?,更期待您的?硇胖附蹋?藉由技戌交流,?? KaffeVM 有更好的办
展。
[1] http://www.kaffe.org/


■ JVM (Java Virtual Machine) 陪 Java 礴篦

Java VM ?橐??????M的平台,把呃??平台加以硬篦??作,即 materialized 後,就是
Java chip。?????碚f,它就是一铟??真?r??的 CPU,假若我??不需完整 CPU 妖塍的
韵??,一?涌梢??⑺?弄成 co-processor,如此一?恚?就不??要在 x86 或 Sun Sparc
上用 Java VM ?砟??M,而是直接把 Java bytecode「痍斤」Java chip 上?绦小_@
就是早先 Sun 费?? picoJava 的技戌,??然,胗著各??硬篦?S商的投入,引入更妖
塍的技戌,但原?t上愚念??是一致的。

「模?M」既然非真,??然在效率上就蒉吃??了,所以就常斤人 Java ?绦谐?慢、超耗
儋源的印象,其??那是指 Virtual Machine 的效能。?榱烁倪M JVM 效能,使用杂多
技戌加速,其中最重要的莫如 JIT (Just In Time) Compiler (及?r??诅器,注意:
不要跟「即?r」[realtime] 搞混) 陪 HotSpot 的 Adaptive Compiler 等 dynamic
compilation 技戌。

Java Chip 是 Optimized for Java 的 OOP、exption-handling、memory/garbage
collection 的特氧 chip,而 x86 (即?鹘y CPU) ?K?]有???? C++ 所??诅的 machine
code 中的 new/exception-handling/memory allocation/late-binding 作硬篦支援
的最佳化?幼鳌<br>
拜 VLSI 之兕,memory allocation 以及 garabage collection 的?幼骺山挥捎搀w
????作。在 modem 或????中,用以?滴活?比弈?Q的 DSP (?滴挥?????理) chip 而言
,有所洲的 bit-reverse (作 FFT [快速傅立叁弈?Q] 用的),倘若以一般 x86 ?碜黾br>呃???幼鳎?起瘁慢 10 倍以上。又如以往的浮?c忒算,比整?颠/算慢了 20 ~ 30 倍
,但因有了浮?c加速器的出?F,浮?c忒算的速度可?檎??颠/算的 1.3 倍!

前述提到?? JVM 以 co-processor 形式??作的方式,可以?⒖? Nazomi Communica-
tions [2] 公司的?a品,他??推出一套 Java 加速晶片,呃??代???? JA108 的?a品
?iT???? 2G/2.5G 或 3G 的手?C使用。不需要加砚铪外的????篦,只需?⑦@ JA 208
IC 植入原有系靳韵??中,便可大幅提升 Java ??用程式效率哌 15 至 60 倍。
[2] http://www.nazomi.com/

接著,剐者在 Pentium III 上忒作 MS-Windows 2000 咄行以下????:(原始瘁陪
machine code 的?φ诈

c++ 的 virtaul method calling:
┌──────────────────────────┐
│21: testx -> setx(20); // testx 是一??指?宋锛? │
│──────────────────────────│
│00401091 push 00000014 │
│00401093 mov eax,dword ptr [testx] │
│00401096 mov eax,dword ptr [eax] │
│00401098 mov ecx,dword ptr [testx] │
│0040109b call dword ptr [eax] │
└──────────────────────────┘
不算 argument 4 ??指令

c 的一般 call:
┌───────────────────────────┐
│ good() │
│───────────────────────────│
│0040109f call @ILT+0(?good@@YAXH@Z) (00401000) │
│004010a4 add esp,00000004 │
└───────────────────────────┘
不算 argument 2 ??指令

java 的 virtual call:
┌───────────────────────────┐
│my.getData(33); │
│───────────────────────────│
│ aload_2 │
│ bipush 33 │
│ invokevirtual #9 <Method my.getData(I)I> │
└───────────────────────────┘
不算 argument 2 ??指令.

c++ 的 constructor:
┌────────────────────────────┐
│test *testx = new test(); │
│────────────────────────────│
│00401056 push 00000008 │
│00401058 call ??2@YAPAXI@Z (00401184) │
│0040105d add esp,00000004 │
│00401060 mov dword ptr [ebp-0c],eax │
│00401063 cmp dword ptr [ebp-0c],00000000 │
│00401067 je main+00000030 (0040107d) │
│0040106d mov ecx,dword ptr [ebp-0c] │
│00401070 call @ILT+15(??0test@@QAE@XZ) (0040100f)│
│00401075 mov dword ptr [testx],eax │
│00401078 jmp main+00000037 (00401084) │
│0040107d mov dword ptr [testx],00000000 │
└────────────────────────────┘
11 ??指令

C++ destructor:
┌───────────────────────────┐
│delete testx; │
│───────────────────────────│
│004010a7 mov eax,dword ptr [testx] │
│004010aa mov dword ptr [ebp-10],eax │
│004010ad mov eax,dword ptr [ebp-10] │
│004010b0 mov dword ptr [ebp-14],eax │
│004010b3 mov eax,dword ptr [ebp-14] │
│004010b6 push eax │
│004010b7 call ??3@YAXPAX@Z (00401194) │
│004010bc add esp,00000004 │
└───────────────────────────┘
8 ??指令

java 的 constructor:
┌───────────────────────────┐
│my my1 = new my(); │
│───────────────────────────│
│new #2 <Class my> │
│invokenonvirtual #11 <Method my.<init>()V> │
└───────────────────────────┘
2 ??指令

由此可办?F,?????B配置物件的操作而言,Java 一?? method call 只要一??
machine code,但用 x86 相?π枰? 4 ??,呃是 Java 在指令集?用嬷苯又г?所致。
我??锢而易?? Java 的一?????? ―─ 目的瘁很小,可蒺易置於儋源困窘的家??韵?浼br>中,再加上杂多?F成的 APIs 可咄行呼叫、擂承的使用,????的程式瘁就可办?]??大
的力量。


■ ?绦幸?擎

Java VM 的核心是?绦幸?擎,其行?槟J揭???指令集的定柳,JLS (Java Language
Specification) ????????了???绦? bytecode 指令??作什?N?幼鳎?但?K未????如何
??作,因?檫@是??作者的??任。?绦??r期,?绦幸?擎以?绦芯w (thread) 的形式存在
,如此的?绦芯w可直诅 bytecode 或殓接的透咿 JIT Compiler ?懋a生 native code
。?绦幸?擎??依序?? bytecode 中取出 opcode 陪 operant,依?? JLS ?????绦邢嗉br>晷?幼鳎?接著再取下一?? opcode,直到 method 返回或是?G出 exception。呃部份
剐者不打算提太多,因?槭忻嬉呀?有钊多??秀的??籍可供?⒖迹?列????目作?⒖迹杭br>
探??一般性的 Java VM 忒作?C制:
1.《Java Virtual Machine》 O\'Reilly 出版
作者:Jon Meyer & Troy Dwning
有中诅本:《Java ???M?C器》,由???? Java ?嗤?蔡?W缦所诅
2.《Inside the Java 2 Virtual Machine》 McGraw-Hill 出版
作者:Bill Venners
如果迂得上一本咿於抽象,那 Venners ??的呃本??????很合您胃口,??坐?r??
搭配??附光碟,有互?邮? Java Applet 解真??中的 JVM 概念,作者的咀?? [3]
相??赜富的儋料整理。本??腠有中文翻诅本,但??烈建阻?e花冤枉遑,因?橹?锗
百出。
[3] http://www.artima.com/insidejvm/resources/

?W㈧肚度胧? JVM 韵??:
《深入嵌入式Java???M?C器-Inside KVM》
作者:胡岳?? (Mango Hu)
?缀跏鞘烂嫔衔ㄒ槐咎接? Java KVM ??作的??籍,的催是相????倨的?⒖肌2贿^
,需要留意的是,作者直接挖出 KVM 的原始程式瘁,是否??咿充分授?啵?值得
商榷。


■ Java VM 效能探??

目前商?I Java VM 效能最突出的?a品是 BEA 的 JRockit [4]。JRockit 主要??
server-side ??用做了很多改咄,?K且 Intel ?f助 IA32 陪 IA64 平台的最佳化,
於是,在多?? benchmark上 (SPECjbb 和 SPECjAppServer) 上,JRockit 哜哜钌先
群雄。BEA 是一家引钌 J2EE 技戌的重量???S商,在 Enterprise 钌域除了??越的技
戌外,??然要有??健高效能的 Java VM,於是 BEA 就偕下 JRockit了,在杂多高肓
??用都可??到 JRockit VM 的??叟。BEA 咀站上有篇由 Joakim Dahlstedt ?坦P的文
章,暾述 Java VM 的效能表?F其??可以打破杂多人眼缫的:[Java - A Slow
Language? It Depends on What You\'re Talking About] [5]。
[4] http://www.jrockit.com/
[5] http://dev2dev.bea.com/products/wljrockit81/articles/Dahlstedt.jsp

Joakim Dahlstedt 的?眍^可不小,是 JRockit VM 的主要韵??者,?F任 BEA System
彦钷 Java Runtime Group 的技戌樘,呃篇文章?K非老王脔瓜,相反的,Joakim 要
我??明掺,怎?? Java VM "benchmark" (效能怎比) 的方式需要整整,主要是基於以
下?醉?:

1.一般的 benchmark 比蒉?H?H是 micro-benchmark level,不能推?V到 system-
level。
2.??篦?a?I檫办方式办生了很大的??化,大量使用 class library、framework、
Application server,乃至 Web services。援引沛的 benchmark ?H能???ζ渲屑br> ???e software stack,?s不能咄行 system-level 的全面分析,如此的衡量本
身就有??铨。
3.Java VM 本身的 Dynamic Optimization,可依??最真??的 profiling ????整整
元件,使其???π?能咄行重酵。
4.最後,新的 CPU 架??,像是 Intel EPIC 可能更唔合於 Dynamic Optimization
,而非?鹘y static compiler。在 EPIC 的架??下,compiler ?π?能的影??相
??大,compiler 有??任啉?衿叫刑?理的指令集,而非像?鹘y Pentium 引入自?蛹br> 的 out-of-order ?y序?绦兄г?,呃意味著,??篦支配了 EPIC 的效能,呃??
static compiler 是不利的,因???H能?? bytecode 取得固定的靳??陪符??,?s
未能?φ??? profiling 作????。

Joakim 的劫??斤予我??很好的??办:

"In conclusion, ..., but I hope I\'ve convinced you that using runtime
systems like Sun Microsystems\' HotSpot or BEA WebLogic JRockit Java
is not slow or inefficient, and that the performance of a large-scale
system built with Java may be superior to that of the same system
built using C."

IBM 的 JDK 曾??一度是最佳性能的 Java VM,但 Sun JDK 1. 4的性能已陪 IBM JDK
1.3 相??,其 server 版?裼酶?峰?O的 JIT 和 GC (Garbage Collection) 技戌,尤
其是???? SMP 的??用提供最唔合??硬篦架??陪多?绦芯w??理的 GC。

在另一方面,IBM ???炔康? Jalapeno JVM 研究???? [6] 的成果以 Open Source 授
?噌?出的 JikesRVM ???? [7],提供一???y??杂多 JIT 陪 GC 等技戌陪演算法的?⒓br>考??作平台。IBM Rearch ?? JikesRVM ??作 JIT 方面的一?? research infrastru-
cture,在咀站上吝列了相??赜富的??文可?⒖? 。剐者?⒖剂? JikesRVM 的研究方向
,帐?? JIT Compiler 办展???菘闪谐鲆韵拢杭br> 1. ??似於 Hotspot [8] 整合 base interpreter、profiling,以及 adaptive
compiler 三肺技戌的途?健<br> 2. ???B profiling 技戌,?暮??蔚? counter-based algorithm 咄化到
performance monitoring event。
3. ??用祜?B compiler 中更 aggressive 的??诅技戌 (?? JIT Compiler 而言,
??诅?r殓已是次要??铨),?a生最佳化原生瘁 (native code)。
4. ??用 inter-procedural 分析,例如 escape analysis 可以 remove synchro-
nization 和??施 stack allocation。
5. ?⒖? Runtime 所?@得的儋?? (主要是 metadata 和 dynamic allocation),?a
生最佳化原生瘁。

[6] http://www.research.ibm.com/jalapeno/
[7] http://www-124.ibm.com/developerworks/oss/jikesrvm/
[8] http://java.sun.com/products/hotspot/

接著,我???砜纯? Sun 的 Hotspot 技戌。提到 Hotspot 不能不提 Henry Massalin
呃位先??,Henry 的博士??文在 Java Glossary 的 HotSpot 的解?? [9] 中被柞??
"the mother of all self-modifying code",同?r,HotSpot 也是 "builds heavily
on work done in a PhD thesis by Henry Massalin"。

[9] http://mindprod.com/jgloss/hotspot.html

Java 最初的??作是透咿直诅器 (interpreter),但呃?K非意味 Java 一定被解诅?碳br>行的。早期的 Java VM 的催是逐一指令的解诅,因此效能?O不理想,於是引入了
JIT 等晷嫔技戌,而 HotSpot 可真下??世代的 JIT。?? Sun 官方文?I指出,使用
HotSpot 的 Java VM 在 Runtime ?r期已??很膣分辨 Java bytecode 是否被 JVM 解
???绦辛耍?因?? HotSpot ??肴上是把 Java 的bytecode ??诅成原生瘁?绦辛恕<br>
??肴上,在 HotSpot 韵??中,有????技戌是相??重要的,也就是所洲 dynamic
compilation 和 profiling。HotSpot ?? bytecode 的??诅,?K非在程式?绦星邦A先
??诅的 (呃肺?鹘y的方式相?Χ?言费?? static compilation),相反的,是在程式?碳br>行咿程中,以 HotSpot ?冉ǖ木?诅器做???B的??诅,早期的 JIT(Just In Time) 其
??也是如此的概念,不咿?]有 HotSpot ?淼萌?面性。

那?N,HotSpot 是如何???B??诅 Java bytecode 呢?tHotSpot ?裼靡???高度??性的
韵??,?炔烤S罪了 Profile Monitor,?iT毕??程式?绦兄校?判?喑淌狡?段中使用的
铎率高寡,?K依???π阅苡绊?的程度,交付於若干演算法??理。HotSpot ??於那些??
程式?绦??r效率影??蒉大的程式瘁片段,特费?? hot spot (特?e以小??????,避免
陪 HotSpot 混淆),HotSpot ??呃些片段???B??诅成原生瘁,同?r,??依??之前
profiling 的劫果,??呃些原生瘁咄行最佳化,?亩?提高?绦行?率。相反的,如果?碳br>行铎率蒉低的程式瘁片段,HotSpot 就?]必要花?r殓做???B??诅,只需要以直诅器?碳br>行即可。

整篦而??,在 HotSpot 下,Java bytecode 是以解诅的方式被蒌入到 JavaVM 中,
但是 HotSpot 立刻??依??某些程式瘁片段?绦械????B,?@知其中?π?能影??最大的
部分,透咿???B??诅陪最佳化??理,建立原生瘁,於是,接下?淼??绦羞^程中就可?@
得相??程度的效能提?N。我??可以得知,HotSpot ?? bytecode 的?绦杏幸韵氯?肺??
理方式:
- 直诅 (不???B??诅)
- 部分???B??诅
- 依?? profiling 劫果做???B??诅陪最佳化??理
至於程式哪部分只做直诅、部分???B??诅,以及哪部分做何肺最佳化??理,?t全程由
Profile Monitor ?Q定。

?裼? dynamic compilation ??比?鹘y的 static compilation ???硎颤N???c呢?撇
檫跨平台需求不??,dynamic compilation 在杂多方面??越於?鹘y的途?剑?特?e是
profiling 的能力。咿去 static compilation 很膣精?实念A知程式?绦兄芯烤购翁?
才是最需要最佳化??理的部分,?H能透咿?冉ǖ? template ?斫??? micro-level 的
最佳化程式瘁。相反的,dynamic compilation 可?@悉最真??的 profiling 表?F,
依??需求???B整整,呃在日後??理器逐?u??篦化的办展???荻?言,更锢得重要,因?榧br>咿去硬篦的工作逐?u移弈到??篦?碜觯?compiler optimization 的??任就格外沈重了
,像是前述 Intel EPIC 架??。

另一??典型的例子,费?? method inlining。?o??是在 C++ 或是 Java 中,呼叫
(invoke) method 是很消耗系靳儋源的,系靳必??居罪堆?B操作,以符合盍期的
calling convention。於是,有人提出把原本需要做 method invocation 的??理,
改用 inline 的方式,「嵌入」到原本呼叫的地方,如此一?恚?就只是?渭?的循序?碳br>行,也不??有堆?B操作。但是,method inlining 的方式?? C++ 陪 Java 一??的物
件??向遮言?碚f,??诅器很膣有很好的??作方式,因?樾枰?兼??物件??向的特徵,尤
其是居持 dynamic binding 性冱。static compiler 其??可以把 C++/Java 中?傩约br>?? private 陪 static 的 method 做 method inlinng,但是一旦有 overridden 或
dynamic binding ?r,static compiler ?o法得知??肴上的?绦????r,就??保守的不
予??施 inlining。呃??膣铨,恰好可被 HotSpot 一?? dynamic compilation 的韵
??迎刃而解,因?? Profiling Monitor ?? method invocation 的???r可以掌握,??
然可精?实牡弥? Runtime 中,RTTI (Run-Time Type Identification) 可?f助
HotSpot ??理 method inlining,因此,在 server-side ??用呃肺重妖咄行某??目
?绦??r,可?@得钊大的效能提?N。

Sun 的文?I也指出,在某些???r下,Java 的??用程式甚至可比?鹘y的 C 程式??快。

以目前办展而言,JIT Compiler 的成本主要在於 profiling 陪 dynamic compila-
tion ?身?。理想而言,呃?身?成本???????? constantant time,於是杂多研究??文
相擂提出,以作?樾?能改咄。特氧?? JIT Compiler 使用、精度不需很高的 Java
Runtime profiling 可?⒖肌戳 Portable Samplling-Based Profiler for Java
Virtual Machines〉[10],????文提出?裼? sampling 的方式?碜鼋?似分析。而至於
Dynamic compilation 的 overhead 可以用?u咄式最佳化的方式???p少,在 Sun 的
HotSpot 白皮??已有??蓖的介铰。

[10] http://www.stanford.edu/~jwhaley/papers/javagrande00.pdf

??而言之,Java 效能阻铨主要分以下?用嫣接?:

- 一般性
VM 陪 JIT 殓的互?印⑩ytecode to IR translation、IR to machine IR
translation,以及 code generation/formatting

- 陪平台架???o晷 (machine-independent) 的最佳化
CSE、loop invariant code motion、inlining、speculative inlining、
method specialization,以及 multiversion code

- 陪平台架??相晷 (machine-dependent) 的最佳化
Local/Global register allocation、instruction selection、instruction
scheduling,以及 code/data alignment

- Java 遮言?用娴淖罴鸦?
Rangecheck elimination、checkcast/instanceof removal、type propagation
、optimizations enabled due to strong typing

- Garbage Collection
Precise/imprecise/copying/generational/incremental

- 平行向量化??理 (vectorization)
??用 RISC 工作站的平行??理指令,或是如 Intel 提出的 MMX 陪 SSE 指令集


■ Linux 平台的 Java VM

在早期的 Sun Java VM ??作中,?绦芯w的支援主要透咿 Green Thread 的 light-
weight thread ??作的,呃可以催保 Java VM 在??冱性的作?I系靳仍可有限度的?碳br>行诀支援,然而,呃?е滦?率的低落,??竟不是直接使用作?I系靳的 Multi-thread-
ing ?C制。

目前 Sun Linux JDK 已用 native thread 改??咿,而 Linux 的 multi-threadded
能力在 IBM 等大?S的投入改咄,主要有以下?煞N形式:

1. NGPT ─ Next Generation Posix Threads
?⒍??? Java thread 映射 (mapping) 到少?c kernael thread

2. NPTL ─ Native Posix Thread Library
?⒚??? Java thread 映射 (mapping) 到一?? kernel thread,以最佳化
kernel thread

其中,NGPT [11] 是 IBM 的一?? Open Source ????,衍生自 GNU Pth ???? [12],
NGPT 透咿 patch Linux Kernel 2.4 陪 glibc 的方式?硖峁┲г?。NPTL ?t是
Linux Kernel 2.6 中重要韵??,可?㈤?〈The Native POSIX Thread Library for
Linux〉[13] 陪〈Linux: Native POSIX Threading Library (NPTL)〉[14] 呃?煞菁br>??典文?I。

[11] http://www-124.ibm.com/developerworks/oss/pthreads/
[12] http://www.gnu.org/software/pth/
[13] http://people.redhat.com/drepper/nptl-design.pdf
[14] http://kerneltrap.org/node/view/422

接下?淼钠?幅,剐者?⒔榻B曾接狱咿的 Open Source JavaVM ??作。

- Kaffe ( http://www.kaffe.org/ )

Kaffe 算是呃??钌域中老字??的?0福??? 1996 年 Tim Wilkinson 完成最初的架??
至今已??七年?v史了。Kaffe 一檫始是 Tim Wilkinson 在英??办展的 clean-room
JavaVM ??作,所洲 cleanroom,就是在不?⒖? Sun JDK ??作的前提下,自行檫办另
一??相容的??作品,那?r的 Kaffe 是 BSD-like 授?喾绞结?出的。1997 年,Tim
Wilkinson 陪 Peter Mehlitz ??立一家?W㈧? JavaVM ??作的公司,Transvirtual
Technologies (TVT),成功的把 Kaffe 商?I化,?哪??r候檫始,Kaffe 有????版本
:一??是 GPL 授?嗟? Open Source ??作,也就是 Kaffe.org,另外?t是 TVT ?炔考br>居罪的 Custom Edition,奠定了 Open Source 陪商?I办展的典??。

Kaffe VM 韵??的理念在於高度的移植能力以及檫放 (clean-room ??作,不必受限於
Sun 的办行授?喋 办展,由於 Transvirtual Kaffe 的成功,杂多以 KaffeVM ?榛?
盗的研究?0赶嗬^提出,??杂多?湫碌母拍羁山逵? Kaffe ???F。KaffeVM 的移植能
力有多好呢?已??酌??能支援 70 鹞肺平台,甚至包含 JIT 引擎。

Transvirtual Technologies 在 1997 年成立以?恚?就一直活苡於嵌入式砚置的钌域
,而在 2000 年檫始更?⑵溟_办的 Kaffe VM 整合 Debian Linux,韵??出一??费?榧br>PocketLinux 的平台,其核心架??就是 Linux 和 Kaffe VM (特费 Language Engine
),上面跑的,可都是??真?r??的 Java 程式。PocketLinux 是??相??特殊的操作系
靳,以 GNU Debian/Linux ?橹骷???,上跑 Kaffe VM 陪 3rd-party open source
library 的整合?h境,?槭殖盅b置提供 Web Browser、Synchronization、Media
Player,以及 peer-to-peer 解?Q方案,此外,PocketLinux 另一??特?c就是透咿
XML 把 Kaffe 陪 Linux 系靳服?者M行包砚,檫办者只需要透咿 XML 就可以呼叫系
靳提供的功能。

??管是???κ殖盅b置,Kaffe VM 算是最接近完整功能的 Java VM,?缀跄芘c JDK
1.2 相容,也支援 Personal Java ??格,但不支援 J2ME 的 Profiles。Kaffe VM
的定位不?H是 small footprint Java VM,更是全功能的嵌入式 JavaVM,藉此充分
办?] Java 在分散式?h境的威力。

很不幸的,在 2001 年陪 2002 年之殓,Transvirtual 公司面乓?O大的弈??。首先
是 Kaffe.org 的主要居罪者 Edouard Parmelan 在 2001 年去世,??年年尾,Tim
Wilkinson,也就是 Transvirtual 的 CEO ?Q定滕檫公司。面乓技戌人?T陪儋金的瞬
殓短缺,Peter Mehlitz 擂任 CEO 後,?Q定放?? Open Source 办展路??,改???榧?
粹的商?I公司,於是,?? PocketLinux 重新命名?? XOE,?K且不再 Open Source,
Kaffe.org 钅?r成???o人钌鹇的孤?海?停钅於 Kaffe 1.0.6 的版本。然而,Peter
Mehlitz 的佩?舆?是拯救不了公司的???????r。

在 Transvirtual 解散前夕,?T工 Jim Pick <jim@kaffe.org> 在 March 12, 2002
宣布?⒔邮志S罪 Kaffe.org,?K且?⒅铝?咄行 Kaffe Custom Edition (也费?? Kaffe
Pro) 陪 Open Source 版本的整合,呼活檫办者?f助下?? release,也就是 1.0.7
的出?F。2002 年中,Transvirtual 劫束?I忒,但是不意味著 Kaffe 的?]落,相反
的,在 Jim Pick 的钌??下,Kaffe.org 成功的?@得重生,?K且陪其他 Open source
java VM ?0腹蚕黹_办儋源,例如 GNU Classpath 陪 GCJ。

截至今日,杂多重量??的??用程式已??可在 KaffeVM 忒作了,例如 JBoss、Tomcat、
Jetty,以及 Eclipse IDE。

- Japhar ( http://www.japhar.org/ )

Japher ??作大部分的 JDK 1.1 特徵,但不包含 JIT Compiler。自 June 19, 2002
??出 0.11 版後,就?]有办展了,原本的檫办者弈?Q到 GNU Classpath ?0浮<br>
- GNU Classpath ( http://www.classpath.org )

办起於 1998 年的 GNU Classpath 在今日已??成?樵S多 Open Source JavaVM ?0讣br>的???省GNU Classpath 事??上?K非 Java VM,而是提供 Java VM 所需要的 API ??
作,GNU Classpath 的地位之於 Java VM,好比 libc 之於 C 程式。在 2000 年前
,GNU Classpath 一檫始 (0.00 版) 只支援 Japhar,?K且檫办相??唪??,?缀跬?一
???r殓,RedHat/Cygnus 办起 GCJ (GCC for Java) 的?0福?杂多檫办者的努力檫始
咄行整合。胗後 Mark Wielaard 接任居罪者的重任後,GNU Classpath 的??近成熟
,Classpath::JVM [13] 有份目前?窦{ GNU Classpath 成果的?0盖??巍<br>
[13] http://www.gnu.org/software/classpath/stories.html

- GNU GCJ (GCC for Java, http://gcc.gnu.org/java/ )
- ORP (Open Runtime Platform, http://orp.sourceforge.net/ )
- Wonka ( http://www.acunia.com/wonka/ )
- IBM JikesRVM ( http://www-124.ibm.com/developerworks/oss/jikesrvm/ )

IBM JikesRVM 衍生是?炔康难芯坑???,Jalapeno。Jalapeno 是建??於 AIX/PowerPC
、Linux/PowerPC、OS X/PowerPC,以及 Linux/IA-32 等平台的????性 Java VM ??
作,??後,IBM ???炔? Jalapeno JVM 研究????的成果以 Open Source 授?噌?出,
?K成立的 JikesRVM ????,提供一???y??杂多 JIT 陪 GC 等技戌陪演算法的?⒖???
作平台。JikesRVM 在其架??韵??上一直是???湟桓瘢??鹘y的 Java VM ??作上,核心
主要仍以 C/C++ ?橹鳎?但是 JikesRVM 的核心除了平台相依的部分外,其他睫大多
?刀家? Java 遮言??作,也就是真,JikesRVM 可以是 self-contained 的,正如
FAQ 所提及的:

"Jikes RVM is unique in that it is the first self-bootstrapped virtual
machine written entirely in the Java programming language, i.e., its
Java code runs on itself, without requiring a second virtual machine."

在办展前期,JikesRVM 仍使用 IBM ?炔康? core Java APIs class library,呃部
分?K非 Open Source 的,呃也令人??病 IBM 的半整子檫放?B度。但自?? JikesRVM
2.2.1 檫始 (April 7, 2003),JikesRVM 可直接使用 GNU Classpath 的成果,呃也
是真弈??一??完全 Open Source 的 Java VM 研究????。然而,由於 JikesRVM 睫大
部分的核心在建???r,仍需要一?? Java Runtime,所以檫办者??需要安砚 Sun JDK
一??的非 Open Source Java VM,但最近剿於有所改愚。自?? 2.3.2 版 (March 17,
2004) 檫始,我??可以使用 GPL 授?嗟? KaffeVM 作?? JikesRVM 的 boot-straping
Java VM,呃是 Open Source Java VM 另一??成果累峰的展示,可?⒖? JikesRVM
User Guide [14]。

[14] http://www-124.ibm.com/developerworks/oss/jikesrvm/userguide/HTML/
Bootstrapping_with_Kaffe.html

- JamVm ( http://jamvm.sourceforge.net/ )
- JC VM ( http://jcvm.sourceforge.net/ )

(... 未完...)




-= 资 源 教 程 =-
文 章 搜 索
关键词:
类型:
范围:
纯粹空间 softpure.com
Copyright © 2006-2008 暖阳制作 版权所有
QQ: 15242663 (拒绝闲聊)  Email: faisun@sina.com
 纯粹空间 - 韩国酷站|酷站欣赏|教程大全|资源下载|免费博客|美女壁纸|设计素材|技术论坛   Valid XHTML 1.0 Transitional
百度搜索 谷歌搜索 Alexa搜索 | 粤ICP备19116064号-1