写点什么

虚拟机接口比较

  • 2008-08-11
  • 本文字数:1219 字

    阅读完需:约 4 分钟

Andrew John Hughes 最近在其博客 首页上比较了OpenJDK 与GNU Classpath 两者的差异。Hughes 一直从事于OpenJDK 虚拟机接口的构建工作,该接口使得OpenJDK 通过这个接口与不同的VM 实现相结合。这项工作是 OpenJDK 创新的一部分,而 Hughes 则是这项创新的八个参与者之一。Hughes 今年年初的时候发布了相关的最终提议,而另外一些参与者的提议有:

在开发虚拟机接口的解决方案的同时,Andrew 还编写了文档来说明 OpenJDK 与 GNU Classpath 采用不同的方式。 JamVM CACAO Kaffe 等)。另一方面,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

2008-08-11 17:10696
用户头像

发布了 88 篇内容, 共 262.0 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

模块二

树建

架构实战营

微信朋友圈高性能复杂度分析

Geek_85eb5f

Vue进阶(九十六):VuePress 详解

No Silver Bullet

Vue 9月日更

解读顶会CIKM'21 Historical Inertia论文

华为云开发者联盟

华为云 论文 长序列时间 时间序列预测 CIKM’21

架构训练营 模块二

Leach Sun

微信朋友圈的高性能复杂度分析与设计

眼镜盒子

架构实战营

架构实战营 - 模块七作业

思梦乐

转型 Golang 开发的心路历程

baiyutang

php 云原生 求职 Go 语言 9月日更

微信PaxosStore:深入浅出Paxos算法协议

OpenIM

微信朋友圈高性能复杂度分析

消失的子弹

微信 架构 互联网 云原生

Go的测试框架

Rayjun

Go 语言

【VueRouter 源码学习】第四篇 - 创建路由映射表

Brave

源码 vue-router 9月日更

微信朋友圈高性能复杂度分析

看,有只猪

模块二作业

bin

自己动手写个微型博客吧,还能实现网页版 Blink,No.1

梦想橡皮擦

9月日更

Node.js 应用全链路追踪技术——[全链路信息获取]

vivo互联网技术

node.js 大前端 编程语言 全链路追踪 语言 & 开发

学习-2

4anonymous

【Flutter 专题】55 日常问题小结 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

微信朋友圈高性能复杂度分析

Sky

#架构实战营

模块二作业

紫云

朋友圈高性能复杂度分析

陈家豪

架构实战营

11. 有大数据就有人工智能的机会

Databri_AI

人工智能

50亿海量数据如何高效存储和分析? GaussDB (for Cassandra) 3个秘诀搞定

华为云开发者联盟

存储 华为云 海量数据 分析 GaussDB (for Cassandra)

架构实战营模块二作业-分析微信朋友圈的高性能复杂度

李焕之

架构实战营作业 -- 模块二

冬瓜茶

架构训练营 模块二

初一

架构实战训练营模块 2 作业

Sonichen

模块七

SAKIN

架构实战营 - 模块二作业

Alex.Wu

架构设计系列二 如何抓住架构设计的关键点

nydia

书单 | 做数字化转型,离不开这10本书!

博文视点Broadview

虚拟机接口比较_Java_R.J. Lorimer_InfoQ精选文章