2
As strange as it sounds, the performance drain really is on this one line of code right here:
g2d.drawImage(background, 0, 0, this);
The reason is that background is a rather large image, and the g2d is performing a scale and a rotate every time. If you enabled OpenGL via -Dsun.java2d.opengl...