soc*_*soc 6 java language-agnostic jvm class
Java VM能够启动的最小类子集是什么?
我想绝对需要像Object,String和primitves这样的东西,因为它们在VM的许多部分都是硬连线的.
我对JVM和JDK之间的依赖关系有多大感兴趣.
我想知道的基本问题是:
如果我决定使用不同的编程语言和不同的标准库来分发JVM,那么我需要携带多少"Java"类才能使JVM满意?
找出答案的最好方法就是尝试一下;例如,用于java -verbose.
以各种 JVM 托管语言运行最小程序。
但答案很可能是:
我还应该指出,您得到的答案不会有任何实际用途(...除非您计划创建一个精简的 JRE。如果是这种情况,请阅读下面的后续内容。)
您是否知道所有类是否都是严格必需的,或者虚拟机是否还预加载了它希望应用程序在所有情况下使用的类?
JVM 不会在此基础上预加载东西。相反,它加载代码静态依赖的依赖闭包。根据您的应用程序使用的类,这可能会导致加载实际未使用的类。多年来,Sun 工程师做了很多工作来尝试减少这种影响,但毫无疑问,这种影响在某种程度上仍然会发生。
跟进
从字里行间看,其目的似乎是创建一个精简的 JVM 包来支持某些其他语言的运行时要求。如果是这样,请考虑以下几点:
使用 Java 进行精简版本的创建有许可要求。具体来说,Java、JVM 和 JRE 都是商标术语,如果您在简化的 JRE 环境中使用它们, Oracle可能会追究您的责任。(我并不是说你不能这样做,但你确实需要自己检查一下法律方面。)
肯定存在支持问题。例如,您需要跟踪任何相关的 Java / JVM 安全问题和补丁,并根据需要创建基础平台的新版本。
如果您打算为新语言中的应用程序提供任何调用 Java 库的方法,那么使用精简的 JRE 对于某些用户来说可能会带来严重的痛苦。特别是如果您以某种方式打包您的东西,这意味着它们必须使用您的精简版 JRE。
JRE/JDK 中的一些工具可能对您/您的用户有用。分析器、调试器、JAR 命令等工具。您的 JRE 需要包含运行它们所需的所有类。
最后,对于大多数用户来说,100Mb 的下载量并不是什么大问题。如果是的话,您可以通过销售安装 DVD 赚点钱来支持您的项目。
专注于您真正想要在这里做的事情......并将安装程序优化留给您需要优化生产质量的东西。