写点什么

JamVM:开源的超小型 Java 虚拟机

  • 2014-09-29
  • 本文字数:1368 字

    阅读完需:约 4 分钟

JamVM 是一个开源的 Java 虚拟机,遵从 GPL2.0 协议发布,它符合最新的 Java 虚拟机规范。它的主要特点是其大小非常小,在 PowerPC 上仅有大约 200KB,而在 Intel 处理器上仅有 180KB。不像其他的小型虚拟机(如 Jelatine JVM SableVM 等),JamVM 支持完整的 Java 虚拟机规范。从 SourceForge 的 JamVM 站点得知,今年 7 月底, JamVM 2.0.0 发布,这是首个支持 OpenJDK 的版本(包括 6、7 和最新的 8 版本),该版本完全支持动态调用 (JSR 292)、 Lambda 表达式和类型注解 (JSR 308) 以及方法参数反射。同时,还修复了大量的 Bug , 性能和兼容性也得到了改进,更多 JamVM 2.0.0 相关信息请查看发布说明。JamVM 具有以下特性:

  • 执行引擎支持从基本的使用 switch 实现简单的指令分派处理的解释器到使用栈缓存的内联的解释器多层次的优化(等效于一个简单的 JIT 编译器)
  • 使用原生的线程(POSIX 线程),并实现了线程的所有内容
  • 为了快速锁定,在非竞态条件下使用高效的 thin locks 代替 spin-locking
  • 使用信号标识实现线程的暂停,在正常执行过程中无需检查暂停,从而降低了延迟和提高了性能
  • 在垃圾收集器中使用终结线程完整支持对象的终结
  • 完全支持类和类加载器的垃圾收集和卸载 ( 包括相关的共享库)
  • 支持指针的对象引用和类加载器
  • 完全支持软、弱、虚引用
  • 垃圾收集器能够以同步或者异步方式运行在自己的线程中
  • 类文件中的字符串常量以哈希表的形式存储,使得类之间能够共享字符串常量, 从而减少了类数据的加载
  • 支持 Java 本地接口和独立加载标准的 lib 库
  • 内部本地方法使用新实现的轻量级本地接口,而没有使用 Java 本地接口 (Java Native Interface)
  • 支持 Lambda 表达式 (JSR 335)、支持类型注解 (JSR 308)、支持方法参数的映射、支持动态调用 (JSR 292)
  • 主要使用 C 语言编写,只用了少量依赖平台的汇编程序,所以能够很容易移植到其他架构上

另外,JamVM 的解释器经过了高度优化,吸收了许多最新的技术如堆栈缓存和 direct-threading(直接线程)技术。其最新版本扩展了这些,包括一个代码复制的 JIT 编译器,且编译器也可移植。同时,JamVM 为了支持 UNIX 和 POSIX 兼容的系统进行了重写,不过在 UNIX 系统之间仍然存在不兼容的情况。另外,一些架构需要专门的配置(如内存故障等),最后本地调用约定(或者应用二进制接口)是与平台和架构相关的。JamVM 支持的主要系统和框架如下:

  • Linux 系统: x86、x86_64、ARM、PowerPC、PowerPC64(*)、MIPS、HPPA
  • FreeBSD 系统: x86、x86_64、ARM、PowerPC、PowerPC64(*)、SPARC(*)
  • OpenBSD 系统: x86、x86_64、ARM、PowerPC、PowerPC64(*)、SPARC(*)
  • Mac OS X/Darwin 系统: x86、x86_64、ARM、PowerPC、PowerPC64
  • Solaris/OpenSolaris 系统: x86、x86_64
  • KFreeBSD 系统: x86

其中带星号 (*) 的架构需要使用 libffi 进行配置。

另外,非常著名的 Android 虚拟机 DVM(Dalvik Virtual Machine ) 是基于寄存器实现,它是 Google 等厂商合作开发的 Android 移动设备平台的核心组成部分之一。2006 年,DVM 还在开发中,Google 的 Android 团队就使用 JamVM 开发应用框架。2007 年 DVM 发布, Android 团队才使用 DVM 取代 JamVM。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-09-29 04:4911633
用户头像

发布了 92 篇内容, 共 51.5 次阅读, 收获喜欢 5 次。

关注

评论

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

震网(Stuxnet)病毒深度解析:首个攻击真实世界基础设施的病毒

华为云开发者联盟

安全 后端 华为云 企业号 1 月 PK 榜 震网

直播|镜舟 x Smartbi《后疫情下如何利用数据驱动企业逆势破局》

镜舟科技

数据库 镜舟数据库

跳跃表数据结构与算法分析

京东科技开发者

redis 算法 跳跃表; 数据结构算法 企业号 1 月 PK 榜

百度安全入选权威报告《联邦学习与可信AI市场机会分析》典型厂商

百度安全

SLS:基于 OTel 的移动端全链路 Trace 建设思考和实践

阿里巴巴终端技术

数据采集 Trace 移动端

软件测试/测试开发 | 使用 cURL 发送请求

测试人

软件测试 自动化测试 curl 测试开发

软件测试/测试开发 | 接口测试常用代理工具

测试人

软件测试 自动化测试 接口测试 charles 测试开发

ChatGPT中文版重装上阵

felix

openai ChatGPT AIMODELMARKET

软件测试/测试开发 | 接口测试之HTTP 协议讲解

测试人

软件测试 HTTP 自动化测试 接口测试 测试开发

数据库故障致美国超一万航班取消或延迟

NineData

数据库 运维 数据库开发 数据备份 数据系统

诠释现代美学设计,TECNO首款笔记本电脑MEGABOOK T1重磅来袭!

极客天地

软件测试/测试开发 | 接口测试之HTTP、HTTPS 抓包分析

测试人

https 软件测试 HTTP 自动化测试 测试开发

又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速

华为云开发者联盟

人工智能 华为云 昇腾AI 企业号 1 月 PK 榜

重磅发布 | 博睿数据发布金融行业精选客户案例集

博睿数据

可观测性 智能运维 博睿数据 精选案例

EMQ受邀出席华为云Top SaaS领航者私享会,共话SaaS企业发展未来

EMQ映云科技

物联网 IoT 华为云 emq 企业号 1 月 PK 榜

YonBuilder 应用构建教程之移动端扩展

YonBuilder低代码开发平台

稳定支撑千万级月活,华为日历背后的英雄

华为云开发者联盟

数据库 后端 华为云 企业号 1 月 PK 榜

报告下载 | DQMIS高端闭门论坛成果报告——《2022第六届数据质量管理国际峰会关于数据要素发展几点看法和建议》

数据质量管理智库

数据 数据治理 数据安全 隐私计算 数据要素

逃不开的安迪-比尔定律,在智能机器人时代该如何破解?

优必选科技

人工智能 机器人 视觉处理

用 Pipy 做个 HTTP 隧道

Flomesh

HTTP Pipy 流量管理

Databend 内幕大揭秘第一弹 - minibend 简介

Databend

rust

【避坑指南】快准狠!一键采购电子元器件

华秋PCB

工具 元器件 PCB PCB设计

【iOS逆向与安全】系统推送服务(APNS)拦截

小陈

安卓 ios开发 逆向 iOS逆向 ios安全

TracedModule: 更友好的模型表示方案,模型训练到部署的桥梁

MegEngineBot

深度学习 开源 MegEngine 模型训练到部署

合作升级|Kyligence 跬智智能分析平台入选华为云联营商品

Kyligence

数据分析

软件测试/测试开发 | 使用postman发送请求

测试人

软件测试 Postman 自动化测试 接口测试 测试开发

【深入浅出Spring原理及实战】「源码调试分析」结合DataSourceRegister深入分析ImportBeanDefinitionRegistrar的源码运作流程

码界西柚

spring Spring Framework

从指标到洞察力的普罗米修斯

宋小生

Prometheus 普罗米修斯 普罗米修斯监控

书单 | 春节假期,我想把这几本书带回家!

博文视点Broadview

易观千帆 | 11月用户体验GX评测:银行APP用户体验稳定提升,从流量竞争逐渐转向用户体验竞争

易观分析

用户体验 手机银行

JamVM:开源的超小型Java虚拟机_Java_李士窑_InfoQ精选文章