2013-11-20 2 views
3

Я тестировал свое приложение в Java 7 на Mac OS X. Он работает заметно вяло. Я использовал VisualVM, чтобы попытаться отследить, где узкое место было найдено и линейной интерполяции виновником:Медленная билинейная интерполяция Java2D в Java 7 на Mac OS X

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

В какой-то степени это имеет смысл, конечно. Использование интерполяции замедлит работу. Но я не вижу такой драматической разницы между использованием и не использованием интерполяции в Java 6 на OS X. В Java 6 разница была почти незначительной. (Изображения ниже представляют профиль VisualVM из paintComponent() после запуска через стандартную анимацию в моем приложении.)

С интерполяцией:

enter image description here

без интерполяции:

enter image description here

Но в Java 7 на OS X разница намного заметнее:

С интерполяцией:

enter image description here

без интерполяции:

enter image description here

Я предполагаю, что проблема заключается в аппаратном ускорении и переходе от Apple, в Oracle. Возможно, Apple Java 6 использовала аппаратное ускорение для интерполяции, а теперь Java-версия Oracle - нет. Объясняет ли это это? Есть ли решение? Я пробовал 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); 
+0

Это говорит о том, что эта проблема не будет исправлена ​​какое-то время: https://bugs.openjdk.java.net/browse/JDK-8017247 – whiskeyspider

+0

Любая идея, почему «без интерполяции» упала настолько низко? Считаете ли вы, что этот путь только что был оптимизирован в программном обеспечении vis-a-vis 6? –

ответ

1

Я думаю, что вы ударили ноготь по голове. По всей вероятности, Apple предоставила аппаратное ускорение с использованием JVM. Вы можете запросить в списке рассылки Porters group подпроект Mac Port OpenJDK.

Смежные вопросы