【问题标题】:Why can't GraalVM native image compiler build an image without any additional information?为什么 GraalVM 原生镜像编译器不能在没有任何附加信息的情况下构建镜像?
【发布时间】:2021-12-19 13:55:39
【问题描述】:
编译器使用一个 JAR 文件:
native-image [options] -jar jarfile [imagename] [options]
所以可以在没有reflect.json、resources.json 等的情况下扫描所有类和资源。为什么我们需要指定从类路径或通过Java 反射获取的所有文件?在我看来,性能问题超出了范围。因为它会更好地支持任何库,即使它会比可能的慢。
【问题讨论】:
标签:
java
jar
graalvm
graalvm-native-image
【解决方案1】:
生成的可执行文件经过优化以运行特定应用程序,而不是任何应用程序。
主要限制不是包含或不包含什么,而是您无法在运行时加载新类。
任何不依赖于在运行时加载动态生成的类的库/应用程序都可以通过适当的配置得到native-image 的完美支持。
确实可以包含整个 java.base、所有依赖项...最终的可执行文件将具有更多“功能”,但会牺牲(更大的)大小和编译时间。