Mac OS X上Java 7中的慢速Java2D双线性插值

Mac OS X上Java 7中的慢速Java2D双线性插值,java,performance,macos,java-7,openjdk,Java,Performance,Macos,Java 7,Openjdk,我一直在Mac OS X上用Java 7测试我的应用程序。它运行缓慢。我使用VisualVM试图找出瓶颈所在,并发现线性插值是罪魁祸首: g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 在某种程度上,这当然是有道理的。使用插值会减慢速度。但是我看不到在OSX上的Java6中使用和不使用插值之间的这种显著差异。在Java6中,这种差异几乎可以忽

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

g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
在某种程度上,这当然是有道理的。使用插值会减慢速度。但是我看不到在OSX上的Java6中使用和不使用插值之间的这种显著差异。在Java6中,这种差异几乎可以忽略不计。(以下图像表示在我的应用程序中运行标准动画后,
paintComponent()
的VisualVM配置文件。)

使用插值:

无插值:

但在操作系统X上的Java 7中,区别要明显得多:

使用插值:

无插值:

我猜问题在于硬件加速和从苹果到甲骨文的转变。也许苹果的Java6使用硬件加速来进行插值,而现在Oracle的Java7则不是。这能解释吗?有解决办法吗?我试过
sun.java2d.opengl=true

更新:我发现该问题仅在使用
setRenderingHints()
应用插值时出现。如果使用另一种方法对图像进行插值,例如
仿射变换器
,则性能下降将消失。例如:

g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
AffineTransformOp scaleOp = new AffineTransformOp(scaleTransform, AffineTransformOp.TYPE_BILINEAR);
scaleOp.filter(screenSliceFiltered, screenSliceFilteredScaled);

我认为你一针见血。苹果很可能提供了JVM杠杆式的硬件加速。您可能会在OpenJDK的Mac Port子项目的邮件列表上询问。

这表明这个问题在一段时间内不会得到解决:您知道为什么“无插值”会降到这么低吗?你认为在vis-a-vis 6软件中这条路径已经优化了吗?