javaws.exe与java8中的java.exe相比性能不佳

时间:2015-01-24 09:50:17

标签: java performance profiling java-8 java-web-start

您必须与Oracle签订支持非公开可用Java版本的合同,例如Java6以1.6.0_45公开结束,但有了支持,您可以使用1.6.0_80。我们的目标是保持支持和公共可用的Java平台。因此,我们希望将基于jnlp的RIA应用程序从Java6迁移到java8平台。在迁移测试中,我们遇到了性能问题。我们尝试在Java 8 poor GUI performance compared to Java 6中模拟这个问题但我们意识到问题与该问题无关。

介绍之后,为了找出问题的根本原因,我们使用与jdk捆绑的java任务控制(jmc)来分析应用程序。当我们分析在工作区启动的应用程序时,我们看不到任何性能下降。然后我们意识到问题只发生在JAVAWS环境中。我们的应用程序在java环境中按预期运行,但在javaws环境中,某些GUI非常慢,它会使响应时间增加6秒。

我的第一个问题是我们如何分析javaws启动的java应用程序?因为要使用jmc我们需要设置一些JVM参数(java-vm-args="-XX:+UnlockCommercialFeatures -XX:+FlightRecorder")但javaws不支持这个JVM参数。您可以在here

找到支持的列表

我的第二个问题是为什么应用程序在两个环境(java和javaws)上运行不相同?我们检查了应用程序的签名和未签名版本,两者都有相同的情况。顺便说一下,我们的应用程序使用all-permission

2 个答案:

答案 0 :(得分:0)

您可以通过键入以下内容将所需的任何JVM参数传递给javaws: Java控制面板> Java>查看>运行时参数

对于性能不佳,您指的是应用程序加载时间吗?或者在申请开始后它是否也很慢?

如果您正在谈论加载时间,那么是的javaws更慢(大约慢3-5秒),因为它必须联系Internet以检查您的jar文件是否列入黑名单或证书是否过期。我不确定它在这几秒内到底发生了什么,但我同意这是令人失望的性能打击,我希望有人可以更多地了解它。

答案 1 :(得分:0)

谢谢赛义德。问题确定了。我们最终进行了分析,发现javaws消耗很长时间来加载资源,例如图标,图像。为了制定解决方案,我们缓存了资源,对于缺失图像,我们返回一个空图像。

您可以在profiling result

看到此信息

为了分析javaws启动的应用程序,我们按照ubuntu

中的步骤制作解决方案
1. move java executable javam
2. create a script file named java and insert following script 
   #!/bin/bash
   /full/path/of/javam XX:+UnlockCommercialFeatures -XX:+FlightRecorder "$@"
3. run application and check java is launched by ps -ef | grep javam
4. run jmc and profile it.