BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 李士窑 关注 0 他的粉丝 发布于 2014年9月30日. 估计阅读时间: 5 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

JamVM是一个开源的Java虚拟机,遵从GPL2.0协议发布,它符合最新的Java虚拟机规范。它的主要特点是其大小非常小,在PowerPC上仅有大约200KB,而在Intel处理器上仅有180KB。不像其他的小型虚拟机(如Jelatine JVMSableVM等),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)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT