速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

Prometheus 监控系统部署应用实战:从零到一

测吧(北京)科技有限公司

测试

第77期 | GPTSecurity周报

云起无垠

低成本亿级流量分布式本地缓存一致性方案(设计篇)

HAibiiin

缓存 分布式系统 架构设计 一致性算法 主从架构

经典排序算法:冒泡排序与选择排序

测吧(北京)科技有限公司

测试

美团一面,有点难度

王中阳Go

Go 后端 面试问题

淘宝天猫API接口探索:轻松实现商品详情与关键字搜索

代码忍者

API 接口 pinduoduo API

CDC YAML 在阿里云的最佳实践

Apache Flink

大数据 flink 实时计算 yaml

主从架构(Coordinator-Worker Architecture)综述

HAibiiin

面试 系统设计 分布式系统 架构设计 主从架构

现在学Spring Cloud Alibaba 还是Spring Cloud?

了不起的程序猿

Java 微服务 架构师 SpringCloud springcloudAlibaba

SD-WAN对MPLS和网络安全的重要意义

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SD-WAN国际专线

OWASP Top 10 安全漏洞与安全防护体系

测吧(北京)科技有限公司

测试

和鲸分享| 世界500强莫德纳公司首席数据科学家Eric J. Ma:协同数据科学的制胜秘诀!

ModelWhale

Python 人工智能 大数据 R语言 大模型

一次彻底掌握数据中心级的JVM调优实战经验

快乐非自愿限量之名

Java spring JVM

企业数智化转型:低代码开发的五大优势解析

不在线第一只蜗牛

低代码 数智化

开发体育直播软件平台,轻松获取全球赛事资源

软件开发-梦幻运营部

JMeter 实时压测结果收集:高效监控与分析

测吧(北京)科技有限公司

测试

Java后端面试最全攻略(2024最新版)

架构师之道

编程 程序员 java面试

http请求超时, 底层发生了什么?

不在线第一只蜗牛

网络协议 网络 HTTP

单链表与双链表的应用与常见算法

测吧(北京)科技有限公司

测试

确保对象的唯一性实现

测吧(北京)科技有限公司

测试

SD-WAN的核心服务能力

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SD-WAN国际专线

为智算“强心”,为园区“壮体”:新质互联网驶入标准化快车道

脑极体

AI

MPC2024开幕演讲

明道云

Spring Security如此复杂,Java程序员该如何学习?

了不起的程序猿

Java spring 程序员 架构师 springsecurity

阴阳怪气的「道歉」背后,是新闻从业者的一次呐喊

TechubNews

2024最全 Java 高频面试合集,掌握这些你也能进大厂!

架构师之道

编程 程序员 java面试

LIFO 后进先出、函数调用的堆与栈的区别

测吧(北京)科技有限公司

测试

告别编码难题,JeeLowCode让应用开发更简单!#高效开发

JeeLowCode低代码平台

直播电商,正在被内容逻辑重塑

趣解商业

直播 电商 抖音

大厂案例:Shopee 百亿级商品数据如何平稳实现千万级服务器成本缩减

HAibiiin

数据库 缓存 架构设计 案例分享 降本增效

数智化赋能龙港中医院,让医疗服务有了“人情味”

Alter

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