littlebot
Published on 2025-04-09 / 0 Visits
0

【源码】基于 C 语言的开源 Java 虚拟机 JamVM

项目简介

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】