As you can see the analysis here in the garbage collection, as well as a nice research paper linked,
Time cost of garbage collection is minimal if you have physical memory 4 times as much as java heap size. I guess satisfying this requirement shouldn't be much for Google. Another limitation of java, the startup cost, shouldn't be much for Google either, as I guess most "servers" keep running for a long time.
Branch prediction and all is nice, but it is difficult to swallow the 2x estimation of performance over java. Could you give some more details? Too much floating point computation?