使Java VM运行绝对需要哪些类?

soc*_*soc 6 java language-agnostic jvm class

Java VM能够启动的最小类子集是什么?

我想绝对需要像Object,String和primitves这样的东西,因为它们在VM的许多部分都是硬连线的.

我对JVM和JDK之间的依赖关系有多大感兴趣.

我想知道的基本问题是:

如果我决定使用不同的编程语言和不同的标准库来分发JVM,那么我需要携带多少"Java"类才能使JVM满意?

Ste*_*n C 3

找出答案的最好方法就是尝试一下;例如,用于java -verbose.以各种 JVM 托管语言运行最小程序。

但答案很可能是:

  • 特定于 JVM 版本,以及
  • 特定于编程语言。

我还应该指出,您得到的答案不会有任何实际用途(...除非您计划创建一个精简的 JRE。如果是这种情况,请阅读下面的后续内容。)

您是否知道所有类是否都是严格必需的,或者虚拟机是否还预加载了它希望应用程序在所有情况下使用的类?

JVM 不会在此基础上预加载东西。相反,它加载代码静态依赖的依赖闭包。根据您的应用程序使用的类,这可能会导致加载实际未使用的类。多年来,Sun 工程师做了很多工作来尝试减少这种影响,但毫无疑问,这种影响在某种程度上仍然会发生。

跟进

从字里行间看,其目的似乎是创建一个精简的 JVM 包来支持某些其他语言的运行时要求。如果是这样,请考虑以下几点:

  • 使用 Java 进行精简版本的创建有许可要求。具体来说,Java、JVM 和 JRE 都是商标术语,如果您在简化的 JRE 环境中使用它们, Oracle可能会追究您的责任。(我并不是说你不能这样做,但你确实需要自己检查一下法律方面。)

  • 肯定存在支持问题。例如,您需要跟踪任何相关的 Java / JVM 安全问题和补丁,并根据需要创建基础平台的新版本。

  • 如果您打算为新语言中的应用程序提供任何调用 Java 库的方法,那么使用精简的 JRE 对于某些用户来说可能会带来严重的痛苦。特别是如果您以某种方式打包您的东西,这意味着它们必须使用您的精简版 JRE。

  • JRE/JDK 中的一些工具可能对您/您的用户有用。分析器、调试器、JAR 命令等工具。您的 JRE 需要包含运行它们所需的所有类。

最后,对于大多数用户来说,100Mb 的下载量并不是什么大问题。如果是的话,您可以通过销售安装 DVD 赚点钱来支持您的项目。

专注于您真正想要在这里做的事情......并将安装程序优化留给您需要优化生产质量的东西。