写点什么

虚拟机接口比较

  • 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:10786
用户头像

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

关注

评论

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

大学生如何让更好的入门计算机?

Bob

入门 话题讨论 话题 大学生

架构实战营模块六作业

竹林七贤

kubelet分析-csi driver注册源码分析

良凯尔

源码 Kubernetes kubelet CSI Kubernetes Plugin

JAVA面向对象(七)--类的属性和方法详讲

加百利

Java 6月日更

新一代数仓架构-Snowflake弹性数仓

一弦思华年

大数据 数据湖 云原生 OLAP 数仓

【Flutter 专题】99 初识 EventBus

阿策小和尚

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

自媒体从业者如何选择合适的公司

石头IT视角

流式基础设施--云基础设施的未来

俞凡

云计算 架构

DevOps的未来

俞凡

DevOps

OnceAgain

一个向往理想的现实主义者

个人总结

Anaconda 如何安装 BeautifulSoup 环境

Qien Z.

6月日更

【21-11】PowerShell 特殊变量

耳东@Erdong

PowerShell 6月日更

【Vue2.x 源码学习】第十九篇 - 根据 vnode 创建真实节点

Brave

源码 vue2 6月日更

计算机系统性能评价

若尘

性能 计算机组成原理 6月日更

《Software Engineering at Google》免费开放

俞凡

c++ 软件工程 Google 大厂实践

Linux之pwd命令

入门小站

Linux

Python——计数器(Counter)

在即

6月日更

智能无线接入网的崛起

俞凡

AI OpenRAN

源码分析--golang读写锁

en

密码你真的了解吗

卢卡多多

密码学 6月日更

Angular管道PIPE介绍

devpoint

angular.js angular 6月日更

如何使用EasyRecovery巧妙恢复被误删的办公文档?

淋雨

数据恢复 文件恢复 Easyrecovery破解 免费恢复软件

低代码开发简史

俞凡

架构

Golang生成随机字符串的八种方式与性能测试

张俭

Performance Go 语言

架构实战训练营 - 模块六课后作业

Johnny

架构实战营

揭秘MySQL的主从同步实现方案

架构精进之路

MySQL 6月日更

Angular模板简介

devpoint

angular.js angular 6月日更

Google大规模监控系统--Monarch

俞凡

架构 分布式 大厂实践

crypto/md5

康家沟偶像天团王大锤

跨越式成长 - 高效的学习方法

Ryan Zheng

六、拆分电商系统为微服务

菠萝吹雪—Code

架构实战营

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