Interpolación bilineal lenta de Java2D en Java 7 en Mac OS X

He estado probando mi aplicación en Java 7 en Mac OS X. Se está ejecutando notablemente lento. Utilicé VisualVM para intentar localizar dónde estaba el cuello de botella y descubrí que la interpolación lineal es la culpable:

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

Hasta cierto punto, esto tiene sentido, por supuesto. Usar la interpolación ralentizará las cosas. Pero no veo este tipo de diferencia dramática entre usar y no usar interpolación en Java 6 en OS X. En Java 6, la diferencia fue casi insignificante. (Las siguientes imágenes representan el perfil de VisualVM depaintComponent() después de ejecutar una animación estándar en mi aplicación.)

Con interpolación:

Sin interpolación:

Pero en Java 7 en OS X, la diferencia es mucho más notable:

Con interpolación:

Sin interpolación:

Supongo que el problema radica en la aceleración de hardware y la transición de Apple a Oracle. Quizás el Java 6 de Apple estaba usando la aceleración de hardware para hacer la interpolación y ahora el Java 7 de Oracle no lo está. ¿Esto lo explica? ¿Hay alguna solución? He intentadosun.java2d.opengl=true.

Actualización: encontré que el problema solo aparece cuando se usasetRenderingHints() aplicar la interpolación. Si utiliza otro método para interpolar la imagen, comoAffineTransformOp, entonces la caída de rendimiento desaparece. Por ejemplo:

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta