Java 7在Mac OS X上的Java2D双线性插值速度较慢

3

我一直在Mac OS X上使用Java 7测试我的应用程序。发现它运行缓慢。我使用VisualVM来追踪瓶颈所在,结果发现线性插值是罪魁祸首:

g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

在某种程度上,这当然是有道理的。使用插值会减慢速度。但我在Mac OS X上使用Java 6时,并没有看到使用和不使用插值之间的明显差异。在Java 6中,差异几乎可以忽略不计。(下面的图像代表运行我的应用程序中标准动画后paintComponent()的VisualVM配置文件。)
使用插值: enter image description here 不使用插值: enter image description here 但是在Mac OS X上使用Java 7时,差异更加明显:
使用插值: enter image description here 不使用插值: enter image description here 我想问题出在硬件加速和从苹果到Oracle的转变上。也许苹果的Java 6使用硬件加速来进行插值,而现在Oracle的Java 7则没有。这能解释吗?有解决方案吗?我已尝试sun.java2d.opengl=true
更新:我发现只有在使用setRenderingHints()应用插值时才会出现这个问题。如果使用另一种方法对图像进行插值,如AffineTransformOp,则性能下降就会消失。例如:
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
AffineTransformOp scaleOp = new AffineTransformOp(scaleTransform, AffineTransformOp.TYPE_BILINEAR);
scaleOp.filter(screenSliceFiltered, screenSliceFilteredScaled);

这意味着这个问题在一段时间内不会被修复:https://bugs.openjdk.java.net/browse/JDK-8017247 - martinez314
你有什么想法为什么“无插值”已经下降得如此之低?你认为这条路径在软件方面只是针对6进行了优化吗? - Peter Alfvin
1个回答

1
我认为你说得很对。很可能是由于苹果提供的JVM利用了硬件加速。你可以在OpenJDK的Mac Port子项目的Porters group邮件列表上咨询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接