Giu*_*ppe 14 java audio performance jvm java-8
我的应用程序在启动时加载了一堆音频剪辑.它用于java.applet.Applet.newAudioClip(URL audioFileURL)加载文件,这些文件位于同一文件夹中.我可以看到这个函数基本上是一个获取JavaSoundAudioClip对象的包装器
直到昨天,我用JDK 7编译JAR并使用JRE版本7更新45启动它.然后我更新到版本8更新31.
现在,每个音频的加载比以前多十倍(每个0.2秒,现在它在2到3秒之间)
在不同的硬件配置上发生了相同的行为.操作系统是64位Windows 7,Java 7和8运行时环境都是32位.
在挖掘更深层次的调试,我发现,放慢了大部分的方法是AudioSystem.getAudioInputStream,AudioSystem.isLineSupported,AudioSystem.getLine
不应该涉及音频格式:我尝试了OGG和WAV,结果相同.
两个JVM的设置都是相同的
编辑:即使我无法在ad-hoc的小程序中重现问题.Java 8确实较慢,但只有10%的因素.我的应用程序必须有一些特别的东西,而我正在使用的库与音频系统和/或其流有冲突.我一发现就会更新.
最后,我发现了导致问题的原因.我使用jar-in-jar-loader(据我所知,它相当于Eclipse选项"将所需的库打包到生成的JAR中")在我的应用程序中包含库jar.到目前为止,这从未对性能产生任何明显影响.
但是使用Java 8,我经历了这种巨大的放缓.使用jconsole监视应用程序我注意到它经常被阻塞,等待zip deflate操作,因此JRE版本8中的某些内容必须更改,现在对于jar内的jar不太优化.
我决定选择提取所有库jar,然后将它们打包到我的应用程序jar中.
| 归档时间: |
|
| 查看次数: |
3216 次 |
| 最近记录: |