【问题标题】:has anyone benchmarked Excelsior JET compile-to-native against a standard java runtime?有没有人根据标准 Java 运行时对 Excelsior JET 编译为本机进行基准测试?
【发布时间】:2012-07-18 13:47:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: java performance compilation


    【解决方案1】:

    免责声明:我为 Excelsior 工作。

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

    现在请允许我提供一些建议:

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

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

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

    【讨论】:

    • +1 用于演示(免责声明加上平衡的答案,不会闻到“市场”的味道)
    • 感谢您的诚实回答。我希望这将有助于吸引您的客户。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      我使用 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 的麻烦,因为使用它不仅有其建议的好处,它在很大程度上取决于您的项目的性质,因为好吧。

      【讨论】:

        【解决方案4】:

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

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

        内存消耗差不多。

        【讨论】:

        • Excelsior 在这里。我们想调查这个问题。您的引擎是开源的还是以二进制形式提供的?
        猜你喜欢
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        • 1970-01-01
        • 2010-12-08
        • 1970-01-01
        相关资源
        最近更新 更多