项目简介
JamVM 是一款开源的 Java 虚拟机,专注于支持最新版本的 JVM 规范,具有紧凑、易于理解的特点。它需与 Java 类库(如 GNU Classpath 和 OpenJDK 的类库)结合使用,以构成完整的 Java 运行时环境。
项目的主要特性和功能
兼容性
- 支持 Java 7 和 Java 8,可搭配 GNU Classpath(兼容 Java 1.5 且含部分 Java 1.6 API,适合嵌入式系统)或 OpenJDK(官方开源 JDK 实现)的类库。
- 兼容多种平台/架构,包括 Linux、FreeBSD、OpenBSD、Mac OS X/Darwin、Solaris/OpenSolaris、KFreeBSD 等系统的多种架构。
性能优化
- 采用原生线程(POSIX 线程),实现完整线程功能,支持
Thread.interrupt()
。 - 运用高效的细粒度锁,无竞争时快速锁定,无需自旋锁。
- 执行引擎支持多级别优化,从基本切换式解释器到带栈缓存的内联线程解释器。
- 采用停止世界的垃圾收集器,有单独标记/清除和标记/压缩阶段,减少堆碎片。
功能特性
- 支持类加载器,对象引用为直接指针。
- 双字对象头,降低堆开销。
- 支持 JNI 和动态加载,使用轻量级本地接口处理内部本地方法。
- 支持
invokedynamic
(JSR 292)、类型注解(JSR 308)、lambda 表达式(JSR 335)和方法参数反射。 - 支持对象终结、软引用、弱引用、虚引用的垃圾回收,以及类和类加载器的卸载。
- 垃圾收集器可同步或异步运行。
- 类文件中的字符串常量存储在哈希表中,减少类数据开销。
安装使用步骤
准备工作
假设用户已下载本项目的源码文件,且安装了必要的编译工具和依赖库。
配置
JamVM 默认使用 GNU Classpath 类库。若使用 OpenJDK 的类库,需在配置时指定相应选项。部分平台/架构可能需使用 --with-libffi
选项支持 libffi。
编译
使用适当编译选项(如优化级别、调试信息等)编译源代码。
与类库结合
- GNU Classpath:配置后,JamVM 提供共享库
libjvm.so
用于 JNI 调用 API,以及独立可执行文件jamvm
运行 Java 程序。 - OpenJDK/IcedTea:将 JamVM 与 OpenJDK 结合使用时,提供共享库
libjvm.so
替换含 HotSpot 的libjvm.so
,用现有的 OpenJDK 启动器java
运行 JamVM。使用 IcedTea 时,可在java
命令行用-jamvm
选项指定加载 JamVM 的libjvm.so
。
运行
运行生成的二进制文件,输入 Java 命令运行 Java 程序。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】