Yeah, that is going to be slow.
The code is using the CPU to copy all the images and not using any hardware acceleration. You have a memory buffer with images in it writing to other memory buffers with images in them.
When you do all that processing everything must go through the CPU. That means the data must be loaded into the CPU cache replacing other things that are there -- like your program's data. The CPU needs to churn through all the rendering code, with the images sizes you are mentioning it sounds like it is processing about 30MB worth of data. Note that 3GHz@60fps = 50 million cycles per frame, so even in an ideal world you have burnt over half your compute cycles by manually copying images. Then the updated image gets transferred out to the video card for display. Contrast this with using the GPU for all of that copying, your program stays running in the CPU all the time and there are no significant image processing going on. The GPU is designed to handle a hundred million pixels per 60fps frame easily.
Assuming you are on a PC and not an Android device (they are also written with Java) look up JOGL, the Java OpenGL interface. Everything you need is under javax.media.opengl.*.
There are many JOGL tutorials on the web, they cover it pretty well.