Java VM可以启动的最小类子集是什么?

我猜像Object,String和primitves之类的东西是绝对必需的,因为它们在VM的许多部分中都是硬接线的。

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

我想知道的基本问题是:

最佳答案

找出答案的最佳方法是尝试看看。例如使用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来赚钱支持您的项目。

    专注于您实际上在这里尝试做的事情...,然后将安装程序优化留给您要优化的生产质量。

    10-07 20:31
    查看更多