【问题标题】:java 8u31 plugin causes signed applets to load much slowerjava 8u31 插件导致签名的小程序加载速度慢得多
【发布时间】:2015-01-27 15:59:28
【问题描述】:

我注意到使用最新插件(包含在 java 8u31 和 7u75 中)签名的小程序加载速度要慢得多。我已经调试了很多情况,我发现问题与 jnlp 文件中引用的 jar 文件的大小直接相关。问题是每次小程序启动时,都会对缓存的 jar 文件进行一些“重新索引”,这需要时间。

为了重现这个问题,我这样做了: 我创建了一个最小的小程序,并且在我用来部署它的 jnlp 文件中,我添加了几个不相关的 .jar 文件(甚至没有被引用,因此类加载器不会加载它们),它们的大小相当大(例如 30MB)。当然,我在 jnlp 中使用版本控制并捕获所有 http 流量,以确保延迟不是因为流量(重新下载或证书吊销检查等)。我在启用跟踪的情况下运行小程序,然后查看 xml 跟踪日志文件并找出延迟的来源:它们总是来自 JarSigningVerifier ....

有没有其他人看到过类似的东西?

很容易看到和重现这种行为,我想知道我是否忽略了某些东西。在过去的几年里,我广泛地研究了小程序,我完全迷失在可能发生的事情上。我可以验证恢复到插件的先前版本(以及之前的所有其他版本)是否按预期工作。

我已经用 oracle 提交了一个错误报告,但我还没有收到回复。任何信息或想法都会有所帮助, TIA

【问题讨论】:

  • 您的问题解决了吗?我尝试使用 Java 8u51,它据说有 Oracle 错误修复的反向移植,但似乎 jar 验证仍然需要大约 20 秒(在非常快的开发人员电脑上)。
  • 我们使用 getitdown 而不是 jnlp。然而,在我们进行的一些内部测试中,似乎新版本确实解决了这个问题。然而,损害已经造成......
  • 我已经尝试了我能想到的一切,但仍然没有解决这个问题,所以我发布了这个问题:stackoverflow.com/questions/31568627/… 同时我也放弃了 Java Web Start。我将创建自己的更新脚本,它可以在我们公司的 LAN 上运行,它会进行简单的版本检查并简单地从网络共享中复制文件。
  • getitdown 的好处是您不需要对 jar 文件进行签名,也不需要在启动时验证它们。您只需要签署非常小的 getdown 小程序。

标签: java plugins applet java-web-start


【解决方案1】:

这里也一样。我以为我已经疯了。感谢分享。

我们正在使用 Java Web Start,但它存在重新索引所有 jar 文件的相同问题(在我们的例子中,它是一个包含很多 jar 的应用程序,因此启动需要很长时间)。

除了 Oracle 突然决定检查部署 TLS 的证书这一事实之外,这在 Linux 和 Mac 上引起了一些问题(我们在那里使用了 StartSSL 证书,它不包含在 Java 密钥库中 - 在 Windows 上它可以工作因为它也使用平台根证书)。

而且,更糟糕的是,在 Windows x86 上,如果 -XX:+DoEscapeAnalysis 或 -XX:+OptimizeStringConcat 出现在 JVM 参数中,则 8u31 会静默死掉,尽管这两个参数在 Java 8 中都是标准的(但在 7 中不是,这就是为什么它们仍然被包括在内)。 64位引擎没有这个问题。

他们改变的下一件事是他们现在覆盖开始图标,如果他们已经改变(我们改变他们把 64 位引擎的路径放在那里),所以它每次都顽固地将路径改回 32 位引擎。

Oracle 的行为根本没有帮助,因为他们没有在其更新日志中宣布任何这些更改,更不用说提前几天宣布证书更改了。

我想听听任何人分享问题和可能的解决方法。

帕特里克

【讨论】:

    【解决方案2】:

    您是否能够解决此问题?您收到 Oracle 的回应了吗?

    更新开始

    结束更新

    我们将 Java Web Start 用于基于 Eclipse RCP 的应用程序,其中的 jar 均已签名。 在 IDE 中启动时间是 8 秒,Java 版本在这里似乎无关紧要。随着网络开始的故事是不同的。每次 Java 更新都会变得(更)糟糕:

    • 7u?? (
    • 7u60:+5s (13s)
    • 7u75:+15s (23s)
    • 8u31:+12s (20s)
    • 8u40:+21s (29s)
    • 8u51:+23s (31s)

    【讨论】:

    • 我们将切换到 getdown (github.com/threerings/getdown)。我一直在使用它,它似乎是一个很好的选择。虽然它使用 JWS 引导,但它的其余部分非常快
    • 谢谢,我试过了,下载后启动很快。我可能会等到 7 月/8 月,然后检查这个问题是否已解决,但肯定会考虑下车。希望它允许安装具有自动更新功能的桌面/任务栏图标。
    • getdown 确实支持您正在寻找的形式。它给我留下了深刻的印象,它是开源的 - 所以你不再被专有错误所困扰。
    【解决方案3】:

    你试过没有版本控制的 jnlp 吗?以我的经验,如果您更改 jnlp 默认值,Java jnlp 会非常有问题。版本支持被支持禁用了,所以在不进行版本控制的情况下尝试一下,看看它是否仍然很慢?

    对我来说,我在使用 update="background" 值时注意到了一些错误,因此我不再更改默认的更新方法。我的理论是 Oracle 在发布新的 Java 版本之前只针对默认值测试 jnlp。

    【讨论】:

    • 我没有也不能。如果没有版本控制,它将使用 http 调用检查每个 jar,这将导致我试图避免的完全相同的延迟。
    • 我明白,但对于 Java,你永远不知道。放弃版本控制最终可能会更快。当我使用后台更新选项时,我还想避免 http 调用。但事实证明,查看文件是否有更改的 http 调用无论如何都非常快,并且在后台没有太大帮助。尝试使用和不使用版本控制并计时,看看哪个加载速度更快。
    • 感谢您的想法;我们已经花费了几个小时/天/周来衡量和优化这些延迟。版本控制是小程序快速加载的必要条件(至少对于我们的情况而言)。但这里的重点是有些东西坏了,我希望要么我弄错了,要么 Oracle 会修复它(或者存在我错过的解决方法)
    猜你喜欢
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多