有没有人尝试使用Excelsior JET对在普通Java运行时上及时运行的同一应用程序编译为本机的java应用程序进行基准测试?我能找到的唯一基准是托管在Excelsior的网站上,用于单个应用程序;我希望看到一些独立的结果。
我的应用程序具有高CPU和内存使用率(它是训练机器学习模型)。我不希望使用Jet提高性能,但我可能需要在没有Java运行时可用的环境(因此编译为本机)上运行,我需要知道性能是否会更差。
我知道Excelsior有一个评估。可用,但我希望节省下载,配置,测试等时间......
答案 0 :(得分:22)
免责声明:我为Excelsior工作。
要回答您的问题,我所知道的最新第三方基准测试结果是 these ,但我刚检查过 - 该帖子已超过四年了。
现在,如果你允许我提供一些建议:
基于超过13年的Excelsior JET市场生活,我可以告诉您,您已经根据您的特定应用进行测试。没有基准测试可以让您了解您的应用在本机编译时的行为方式。正如我们所说,您的里程会有所不同。我们有客户报告我们在实验室中从未见过的速度提升,我们让潜在客户提前放弃评估,因为他们的应用程序变慢了。 (后者经常由于配置错误而发生 - 例如并非所有类都被预编译 - 所以如果遇到类似的事情,请联系我们的工程师。)
还有一些案例研究在我们的网站(#1,#2)上进行了性能比较,但当然这些是来自应用程序变得更快的用户。 ;)
更新2014年12月15日:提醒:从Excelsior JET 10开始,64位版本在性能方面落后于32位版本,因为前者是基于新的,从头构建的编译器核心,实现的优化较少。我们正在努力扭转这种局面,但是现在,如果性能对您来说非常重要和,那么您没有任何理由使用64位版本,例如大堆或者需要与64位本机库集成,或者需要针对OS X,坚持使用经过验证的32位版本。
答案 1 :(得分:9)
我使用Excelsior JET进行免费软件游戏。在我的测试中,游戏运行速度不是更快或更慢,但帧速率与Excelsior JET的一致性比与Oracle的VM更一致。使用JET,我们的游戏启动更好。 JVM需要一段时间来预热并加载所有类,但是使用JET它会立即运行。
如果使用大量线程,Excelsior JET的内存消耗可能会更高一些 - 因为默认情况下Excelsior JET使用大的固定线程堆栈大小。但这可以配置 - 所以这不是问题。
通过电子邮件支持也非常好。你可以与工程师交谈,而不是支持人员。如果您碰巧找到了错误,通常只需要一天的时间。我还要注意,我有一些奇怪的不可再现的崩溃报告来自早期版本的JET用户(> 2岁左右)。目前的版本(7.6,现在8.0)都是坚如磐石的。我们在万台机器上看不到任何崩溃。
简而言之:我可以推荐Excelsior JET,性能(在我们的例子中)和JVM一样好。
答案 2 :(得分: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
进行配置以及可能适当地许可的麻烦对于您的用例是否值得,因为使用它不仅具有建议的好处,而且在很大程度上取决于您的性质项目。
答案 3 :(得分:0)
我刚刚安装了包含维护包3的Excelsior Jet 11 64位评估版,看看我用Java编写的自定义国际象棋引擎是否获得了任何性能(elo-score +/- 2100)。不幸的是,它没有,它的速度几乎减半(英特尔Q9550每秒450k节点而不是1米)。 我想这是因为64位版本的Excelsior没有得到优化。
我的国际象棋引擎使用位板(64位长)作为棋盘表示并执行大量按位操作。此外,它还进行了大量的数组查找。
内存消耗大致相同。