11

有没有人尝试过将使用 Excelsior JET 编译为本机的 Java 应用程序与在正常 Java 运行时上即时运行的相同应用程序进行基准测试?我能找到的唯一基准测试托管在 Excelsior 的网站上,并且是针对单个应用程序的;我希望看到一些独立的结果。

我的应用程序的 CPU 和内存使用率都很高(它正在训练机器学习模型)。我预计使用 Jet 不会提高性能,但我可能需要在没有可用的 java 运行时的环境中运行(因此编译为本机),我需要知道性能是否会更差。

我知道 Excelsior 有一个评估。可用,但我希望节省下载、配置、测试等时间...

4

4 回答 4

22

免责声明:我为 Excelsior 工作。

为了回答您的问题,我所知道的最新的第三方基准测试结果是这些,但我刚刚检查过 - 那个帖子已经有四年多了......

现在,如果您允许我提供一些建议:

基于超过 13 年的 Excelsior JET 市场寿命,我可以告诉您,您必须针对您的特定应用程序对其进行测试。没有任何基准可以让您了解您的应用程序在本机编译时的行为方式。正如我们所说,您的里程会有所不同。我们有客户报告我们在实验室中从未见过的速度提高,并且我们有潜在客户因为他们的应用程序变得更慢而提前放弃了他们的评估。(后者通常由于配置错误而发生 - 例如,并非所有类都已预编译 - 因此,如果您遇到类似情况,请联系我们的工程师。)

在我们的网站上也有一些性能比较的案例研究(#1#2),但当然这些来自应用程序变得更快的用户。;)

2014 年 12 月 15 日更新:请注意:从 Excelsior JET 10 开始,64 位版本在性能方面落后于 32 位版本,因为前者基于从头开始构建的新编译器核心实施的优化较少。我们正在努力扭转这种情况,但目前,如果性能对您很重要,并且您没有任何真正好的理由使用 64 位版本,例如大堆或需要与 64 位集成本机库,或者针对 OS X 的需要,坚持使用久经考验的真正 32 位版本。

于 2012-07-19T03:36:26.910 回答
9

我将 Excelsior JET 用于免费软件游戏。在我的测试中,游戏的运行速度并没有变快或变慢,但是与 Excelsior JET 相比,与 Oracle 的 VM 相比,帧速率与 Excelsior JET 更加一致。使用 JET 可以更好地启动我们的游戏。JVM 需要一段时间来预热和加载所有类,但使用 JET 它会立即运行。

如果您使用大量线程,Excelsior JET 的内存消耗可能会更高一些 - 因为默认情况下 Excelsior JET 使用较大的固定线程堆栈大小。但这可以配置 - 所以这不是问题。

电子邮件支持也很好。您可以与工程师交谈,而不是与支持人员交谈。如果你碰巧发现了一个错误,通常只有一天的时间才能修复。我还想指出,我收到了一些来自早期版本 JET(>2 岁左右)的用户的奇怪的不可重现的崩溃报告。当前版本(7.6 和现在的 8.0)都坚如磐石。我们在万台机器上看不到任何崩溃。

简而言之:我可以推荐 Excelsior JET,性能(在我们的例子中)与 JVM 一样好。

于 2013-04-25T15:48:31.700 回答
1

我使用Excelsior JET 15.0 for Windows测试版本来本地编译我的 CPU 和内存密集型应用程序。

本机编译时间大约需要 40 分钟。原始JAR文件是10MB(由于库)和本机EXE 60MB由于捆绑JRE 8,所以这不是很好,除非不需要安装 Java。在启动时间方面JET似乎做得更好。就连贯的感觉而言,Swing GUI JET也获胜或至少与JRE. 在性能和内存使用方面,我惊讶地找不到合理的改进:有时是赢的,有时是本机二进制文件。他们的表现相当均匀。JIT JAR

在逆向工程保护方面JET这是我见过的最好的,因为本机二进制文件很大,被剥离了,你无法明智地导航或反编译它来提取你想要的东西。另一方面,.jar文件和.class文件很容易反编译回几乎完全相同的源代码。

总体而言,您可以决定为您的用例经历配置和可能正确许可的麻烦是否JET值得,因为使用它不仅有其建议的好处,而且在很大程度上取决于您的项目的性质。

于 2018-07-24T22:47:25.610 回答
0

我刚刚安装了 Excelsior Jet 11 64 位评估版,包括维护包 3,以查看我用 Java 编写的自定义国际象棋引擎是否获得任何性能(elo-score +/- 2100)。不幸的是,它没有,它的速度几乎减半(每秒 450k 个节点,而不是 Intel Q9550 上的 1m)。我猜这是 64 位版本的 Excelsior 没有得到优化的结果。

我的国际象棋引擎使用位板(64 位长)作为其棋盘表示,并执行大量按位运算。此外,它还进行了很多数组查找。

内存消耗大致相同。

于 2016-10-19T17:42:45.413 回答