【问题标题】:Recommended way to embed JVM in C program with NO library?将 JVM 嵌入到没有库的 C 程序中的推荐方法?
【发布时间】:2011-06-15 05:38:58
【问题描述】:

使用 NO 库在 C 程序中嵌入 JVM 的推荐方法是什么。这意味着 JVM 作为 eDSL 执行引擎。 (不是整个 Java 平台环境)我正在尝试使用另一种基于 JVM 的语言而不是 Java 本身。

【问题讨论】:

  • 我记得自己玩过 JamVM。它很小,用 C 语言编写,嵌入起来相当容易。但是它依赖于相当大的GNU Classpass,并且虚拟机在嵌入式环境中表现不佳,所以我最终编写了自己的Java机器。但如果您正在开发桌面应用程序,您可能会考虑将 JamVM 作为一种选择。
  • 澄清“没有图书馆”。您选择了哪种 VM 实现?它提供了一个静态 JVM 实现来链接到您的代码?基于 DSO (DLL/SO) 的版本已记录在案,并且可能是 JNI 标准的一部分,用于与其他本机代码集成。鉴于您使用的是另一种基于 JVM 的语言,您可能不会遇到前面评论者指出的 GNU Classpath 问题。
  • 为了清楚起见:您似乎正在尝试创建自己的 DSL,您计划将其解析为 JVM 字节码,并且您需要将 JVM 实现嵌入到您的系统中以执行生成的字节码。我说的对吗?

标签: c jvm dsl embedding


【解决方案1】:

这听起来很疯狂,但我建议embedding Monousing IKVM 运行您的Java 代码。 Mono 是一个相对较小且可移植的 VM,适合嵌入(您甚至可以将其静态链接到您的应用程序),而 IKVM 是 Java 1.6 的忠实实现,它甚至能够运行像 Eclipse 这样的怪物。

使用 Mono/IKVM 的组合,您甚至可以将您的应用程序提前编译成 x86 机器代码(请参阅Compiling Java Code to x86 Code)。

【讨论】:

    【解决方案2】:

    也许您想嵌入一些其他 JavaVM-s,然后您可能会查看 Kaffe,但我不太了解它,它可能无法满足您的需求。我对 JVM 规范的理解是,类加载器是其中必不可少的一部分(它需要一些核心类)。

    您想使用哪种基于 JVM 的 DSL 语言?

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 1970-01-01
      • 2012-04-26
      • 2014-08-08
      • 2020-10-25
      • 2023-02-21
      • 2010-11-27
      • 1970-01-01
      相关资源
      最近更新 更多