InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

虚拟机接口比较

作者 R.J. Lorimer 译者 张龙 发布于 2008年8月11日

领域
语言 & 开发,
架构 & 设计,
运维 & 基础架构,
企业架构
主题
Java ,
开放源代码 ,
平台
标签
GNU ,
OpenJDK ,
开源Java
Andrew John Hughes最近在其博客 首页上比较了OpenJDK与GNU Classpath两者的差异。Hughes一直从事于OpenJDK虚拟机接口的构建工作,该接口使得OpenJDK通过这个接口与不同的VM实现相结合。这项工作是OpenJDK创新的一部分,而Hughes则是这项创新的八个参与者之一。Hughes今年年初的时候发布了相关的最终提议,而另外一些参与者的提议有:
在开发虚拟机接口的解决方案的同时,Andrew还编写了文档来说明OpenJDK与GNU Classpath采用不同的方式。

JamVMCACAOKaffe等)。另一方面,OpenJDK在过去几年中一直围绕同一个JVM(Hotspot)进行构建。Hughes那样,虚拟机和类库的边界是存在的,但是由于不断的发展,该界限已经变得不那么明显了:
这两个方案都提供了库和VM的分离。尽管HotSpot和JDK被置于同样的地方,但对于OpenJDK来说,这已经与最初的假设截然相反。OpenJDK协议上说,这使得不同版本HotSpot的替换成为可能。也就是说,由于GNU Classpath和任何的VM之间有众多不同的搭配,OpenJDK中的JDK和HotSpot的联系可能会比GNU Classpath和任何的VM之间的联系显得更加紧密些。
Andrew在比较过程中发现了这样一些差异:
  • 预加载的本地库——libjava.so是一个定制Java库,必须由OpenJDK预加载,这与通过类库加载刚好相反。Hughes以CACAO为例,详细分析了CACAO是(一个开源的JVM,已经支持OpenJDK了)如何处理这一切的:
CACAO中,src/native/vm/nativevm.c提供了处理一个特别的OpenJDK用例。这需要在VM初始化过程的早期进行处理,而且要在核心类尚未进行任何本地调用之前进行处理。
  • VM代理类——OpenJDK中的很多核心类库直接由本地接口进行代理(Andrew使用了一个本地声明的方法 Object.wait作为例子)。与此相反,GNU Classpath在大多数情况下会引入一个中间VM类,比如Object.java的中间VM类的则是VMObject.java——这个类处理所有的本地代理,而且可以由其他JVM来替代。
  • 由VM代码引发类库调用——在两个VM中都存在这样一种情况——从VM调用类库。因此,类库的内部结构对于VM的实现有着非常直接的影响。Hughes提到了下面一些区别:JVM启动、NIO字节缓冲区的创建、线程和线程组的处理等。
我们可以根据不同不同的认证来获取Sun JDK的源码已经有很长一段时间了,但出于法律原因,GNU Classpath并没有开放源码;而且Sun JDK的协议与开源并不兼容。但自从Sun将JVM和JDK的协议重新声明为GPL后,开发者就开始比较这两个平台了。

OpenJDK的创新结果将于2008年8月18日正式公布,敬请关注。

查看英文原文:Comparing Virtual Machine Interfaces

译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。

深度内容

专访Jeffery Richter:Windows 8是微软的重中之重

Jeffery Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffery Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。

解析JDK 7的动态类型语言支持

随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。