我正在考虑使用GraalVM本机映像编译Java应用程序,但是我看到的所有文档都涉及减少启动时间,但没有提及整体应用程序性能的改善吗?
那么我能从现实中期待什么?
答案 0 :(得分:6)
通常,性能会下降。我已经报告了本地映像some time ago to the GraalVM team的性能下降。性能降低的严重性可能会因使用案例而异。在基准测试中,我有written and used for my analysis(可以找到here的代码更新版本),开销从“几乎不明显”到“慢5倍”不等。我在talk at the JCON 2019(#shamelessSelfPromotion)中也提到了这一点。
GraalVM团队提供了一张不错的幻灯片,其中说明了针对哪种用例使用哪种技术: (图像取自tweet by Thomas Würthinger)
对于感兴趣的读者:与Andrew mentioned on github一样,糟糕的性能的一个主要因素是不存在JIT编译:JIT编译器可以(除其他外)消除很少使用的分支,从而显着减少加快性能。对于本地编译的代码,这显然是不可能的。
侧面说明:在性能方面,您可以执行clang发出的位代码(即在GraalVM上执行C
/ C++
程序),但是不要指望“良好”的性能完全...?