Hi Tracy,
In its early days, Java was quite a dog speedwise. However, the introduction of a just-in-time compiler and other improvements to the Java runtime environment have greatly improved Java's performance.
I believe that the main reason for slow Java applications lies with how those applications are coded. For example, an application that constantly allocates memory for objects and arrays, and releases this memory via null reference assignments may see the garbage collector run more often, which can provide intermittent pauses in the application's execution. (I call such pauses "hiccups".)
There are many ways to improve performance, and here are a few suggestions:
1) reuse objects
2) use System.arraycopy() to copy one array to another
3) take advantage of
String internment for String comparisons
My book dives deep into the Java language, explaining such things as String internment. It also points out where you can directly access an object's private fields and call its private methods (for performance) without having to rely on the Reflection API (which is slow). I believe that a solid understanding of the language will help the developer create better-performing applications, and providing this knowledge is what I have attempted to achieve in my book.
Regarding Android, you might find the
Inside the Android Application Framework video to be enlightening. Among other things, Google's Dan Morrill suggests that Java need not be the only way to create Android apps.
All the best.
Jeff