首先我要声明的是,在只绘制一次的情况下我们是看不出区别的
但是同一张图片绘制1000次就不同了

protected void paintPicture(Graphics2D g2d) {
        
if (picture != null) {
            Rectangle r 
= createModelRectangle();
            render.setImage(picture);
            painter.painted(g2d, r, 
this);
        }
    }

先讲解一下这段代码,这段代码中的render是一个图片绘制器,其中只有将图片呈现的代码,而这个render将这个方法交给painter调用
然后painter有使用VolatileImage和不使用VolatileImage绘制的方式选择

然后我们添加上测试数据
protected void paintPicture(Graphics2D g2d) {
        
if (picture != null) {
            Rectangle r 
= createModelRectangle();
            render.setImage(picture);
            
long a = System.currentTimeMillis();
            
for (int i = 0; i < 1000; i++) {
                painter.painted(g2d, r, 
this);
            }
            System.out.println(System.currentTimeMillis() 
- a);
        }
    }

窗口大小:500x370
以下是拖动窗口的时间,这些时间是交给SWING进行过优化的,当然,其中大的值比较真实
45
18
1
1
2
2
442
217
241
1
2
窗口大小:不变
不适用加速的绘制方式
62
33
1
1
2317
1143
2
2
很明显,速度上的变化

在JDK帮助中使用硬件加速基本上是不使用硬件加速的5倍能力