- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Java VM 能够启动的最小类子集是什么?
我猜像 Object、String 和 primitves 之类的东西是绝对必需的,因为它们在 VM 的许多部分都是硬连接的。
我对 JVM 和 JDK 之间的依赖关系有多大感兴趣。
我想知道的基本问题是:
If I would decide to distribute a JVM with a different programming language and different standard libraries, how much of the "Java" classes do I have to carry around to make the JVM happy?
最佳答案
找出答案的最好方法是尝试看看;例如使用 java -verbose.
以各种 JVM 托管语言运行最小程序。
但答案很可能是:
我还应该指出,您得到的答案不会有任何实际用途(...除非您打算创建一个缩减的 JRE。如果是这种情况,请阅读下面的后续内容.)
Do you know if all of the classes are strictly necessary or does the VM also preload classes which it expects to be used in all cases by applications?
JVM 不会在此基础上预加载内容。相反,它会加载您的代码静态依赖的依赖闭包。根据您的应用程序使用的类,这可能会导致加载实际未使用的类。多年来,Sun 的工程师们做了大量的工作来尝试减少这种影响,但毫无疑问,它仍然会在某种程度上发生。
跟进
从字里行间看,其意图似乎是创建一个精简的 JVM 包来支持其他一些语言的运行时要求。如果是这样,请考虑以下几点:
对于您可以使用 Java vis-a-vis创建缩减版本的操作,存在许可要求。具体来说,Java、JVM 和 JRE 是商标术语,如果您在精简版 JRE 的上下文中使用它们,Oracle 可能 会效仿您。 (我并不是说你不能这样做,但你确实需要自己检查法律方面的问题。)
肯定存在支持问题。例如,您需要跟踪任何相关的 Java/JVM 安全问题和补丁,并根据需要创建新版本的基础平台。
如果您打算为使用新语言的应用程序提供任何调用 Java 库的方法,那么使用精简的 JRE 对某些用户来说可能是一种严重的痛苦。特别是如果您以某种方式打包您的东西,这意味着他们必须使用您精简的 JRE。
JRE/JDK 中有一些工具可能对您/您的用户有用。分析器、调试器、JAR 命令等工具。您的 JRE 需要包含运行它们所需的所有类。
最后,对于绝大多数用户而言,100Mb 的下载量并不是什么大问题。如果是,您可以通过销售安装程序 DVD 来赚点钱来支持您的项目。
专注于您真正想在这里做的事情……并将安装程序优化留给您需要优化的生产质量。
关于java - 哪些类对于运行 Java VM 是绝对必要的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4120309/
我正在使用 this solution在二进制矩阵中找到与图像边界对齐的矩形。假设现在我想找到一个不与图像边框对齐的矩形,并且我不知道它的方向;找到它的最快方法是什么? 为了示例,让我们寻找一个仅包含
else: 行在这个 Python 程序中是否正确/必要? from random import randrange for n in range(10): r = randrange(0,1
在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者指出“将 w2 逐个字段分配给 w1 会将 w2.array 分配给 w1.array——一个简单的数组边界分配,而
我是一名优秀的程序员,十分优秀!