百科问答小站 logo
百科问答小站 font logo



Java 平台中的 JVM 和 .Net 平台下的 CLR 分别是用什么语言写的? 第1页

  

user avatar   rednaxelafx 网友的相关建议: 
      

前面的回答基本上都覆盖到关键点了:Java Class文件与.NET的Assembly文件格式都是公开的标准,其中的Java字节码与CIL(Common Intermediate Language)也都有公开的标准定义。这便于容纳多种不同的兼容实现。每个平台上的VM实现不需要源自同一份源码,只要它能接受标准格式的输入并相应实现标准中的程序语义即可。

这边来补充点实际例子吧:

JVM

  • Oracle/Sun HotSpot VM - 整体都是用C++实现的,只有非常少量的内嵌汇编。其中包括一个用C++实现的动态汇编器,HotSpot VM需要用汇编的地方多数是用这个在运行时汇编器生成的。
  • Oracle/BEA JRockit - 基本上是用C实现的,有少量汇编,另外有部分本来是VM内部的功能用Java来实现。
  • IBM J9 VM - 核心VM用Smalltalk生成C来实现,一些外围组件例如JIT编译器和GC用“使用了类的C风格的C++”来实现。
  • Sun Classic VM - VM的主体用C实现,解释器循环用汇编实现。最早期(JDK 1.0.2)的时候这个VM还不叫Classic VM,那个时候整个VM基本上是用纯C实现的,包括解释器循环在内。
  • Oracle/Sun Maxine VM - VM自身是用纯Java实现的,包括VM核心、JIT编译器和GC等都是;有一小块启动程序用C实现。
  • Oracle/Sun Squawk VM - VM大部分是用Java实现的,少部分用C实现。部署时用Java实现的部分会被编译成C然后跟用C实现的部分一起编译成最后的二进制可执行文件。
  • Rava - 用纯Ruby实现。这是个超简单的功能还不完全完整的JVM,但足以运行一些简单的Java程序了。

还有用JavaScript实现的

Orto

、用

CoffeeScript

实现(现在用

TypeScript

实现)的

Doppio

之类的。JVM的实现实在太多了无法穷举。

然后跟JVM有深刻渊源的Android系VM中,

  • Dalvik VM主体是用C实现的,解释器有C版本也有各个平台上的汇编版本
  • Android Runtime(ART)主体是用C++实现的

Common Language Infrastructure (CLI)

  • Microsoft CLR (Common Language Runtime) - 主体是C++,少量汇编
  • Mono - 主体是C
  • Microsoft Research Bartok - VM核心是用C#实现的,包括GC在内

怎样,各种奇葩都有吧。可能性无限多。

之前我整理的一份列表里还有JVM与CLI的许多其它实现,楼主有兴趣的话可以参考:

hllvm.group.iteye.com/g



  

相关话题

  如何评价 ASP.NET vNext? 
  Java 平台中的 JVM 和 .Net 平台下的 CLR 分别是用什么语言写的? 
  老师说linq语句过时了,是真的吗? 
  高版本C#语法写的代码能够编译为低版本.netframework的代码吗? 
  Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同? 
  Java的同步机制比起pthread方式有何优点? 
  大三下学期了,比较熟悉C#但哪都看到JAVA薪资和发展都比.net好,想转学JAVA,还来得及吗? 
  现在作为优质程序员的你,大二的时候都在做些什么? 
  对编程感兴趣的程序员是否都对电路、单片机也怀有浓厚的兴趣? 
  今年刚考上机械研究生,想着混个毕业,自学三年java毕业转行可行吗? 

前一个讨论
是不是每一部皮克斯作品的片尾都会有对乔布斯的特别鸣谢?
下一个讨论
在曹雪芹的创作基础上,《红楼梦》要怎样结局才能拥有一个积极向上、给人以希望的主题?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利