写点什么

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

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

关注

评论

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

恰逢金九银十!阿里P8连夜赶稿一份基于实例驱动的设计模式笔记

Java 编程 架构 面试 阿里

justswap市值管理机器人系统软件开发技术(案例搭建)

量化系统19942438797

交易所 做市机器人 justswap

谁在制造“完美男性”?

脑极体

老板:把系统从单体架构升级到集群架构!

程序员 架构 分布式 后端 计算机

广告机主板定制方案能实现双屏异显或四屏异显吗?

双赞工控

安卓主板 主板定制 广告机主板

微信开源PhxQueue:高可用、高可靠、高性能的分布式队列

OpenIM

北鲲云超算平台赋能蛋白设计助推生物制药行业发展

北鲲云

Frida笔记 - Android 篇 (一)

GrowingIO技术专栏

android Frida

ULP Fec与 Flex FEC 概述

webrtc developer

WebRTC fec

白瞟党福音!Alibaba内部最新Java开发手册(嵩山版)灵魂17问

Java 编程 架构 面试 架构师

消息系统的演进:从MOM、ESB到下一代云原生的分布式消息系统

金蝶天燕云

分布式消息

PhxSQL设计与实现(详细版)

OpenIM

腾讯云签约广州知识城商用密码项目,助力黄建设密码产业示范区

腾讯安全云鼎实验室

腾讯云 商用密码

开源之夏项目分享:图数据库 Nebula Graph 支持 JDBC 协议

NebulaGraph

熬了3天2夜,啃完阿里(珠峰版)Java面试笔记,直接斩获12家大厂offer,

Java架构师迁哥

用数据搭建反馈系统

石云升

数据分析 9月日更

防沉迷系统的bug,技术如何查漏补缺?

脑极体

APM领域国产化先锋!博睿数据与麒麟、统信、中科方德完成兼容性认证

博睿数据

微信亿级用户异常检测框架的设计与实践

OpenIM

各编程语言里对 Iterator 进行修改时的对比

BlockQuant

Java Python rust Go 语言

架构实战营模块 7 作业指导

华仔

架构实战营

你们想知道的一切,都在这里了。

ApacheDoris

Apache 开源社区

HashMap为什么是线程不安全的?

Java技术精选

博睿数据云主机性能评测新增6家云厂商,8月报告亚马逊云科技登榜首

博睿数据

Python代码阅读(第25篇):将多行字符串拆分成列表

Felix

编程 Code Programing 阅读代码 -python

活动推荐 | 云原生社区 Meetup 第七期深圳站开始报名啦!

CODING DevOps

Kubernetes DevOps 微服务 活动 Meetup

五行兼备:联想TruScale服务的太极之道

脑极体

前端独立交付需求背景下的Mock数据多方案解读

爱数技术范儿

JavaScript 大前端 Mock

我们是如何在研发过程中控制质量的?产品质量正变得越来越重要

爱数技术范儿

大数据 软件工程

总结下ThinkPHP的代码审计方法

网络安全学海

php 网络安全 信息安全 WEB安全 代码审计

Java 操作 Office:POI word 之表格格式

程序员架构进阶

Java Apache POI 9月日更 word文档

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