The biggest barrier to Java in terms of high performance games is the garbage collector. You never know when it will start[*] and it can eat several tenths of a second every time it does... at which point you can kiss your frame rate goodbye.
As far as examples goes, the only one that springs to mind is Puzzle Pirates. It's a 2D puzzle-based MMO. Quite a bit of fun, though not exactly cutting edge technology.
[*] The GC can start every time an object is created. You have to pre-allocate pretty much everything, then work hard to avoid all the cases where you might allocate something without realizing it.
There's a pretty good video intro to the topic published under the Google IO series (from their Android Development conference):