After a brief introduction to the features of Java that make it different from C (i.e., dynamically-dispatched calls, synchronization, allocation/garbage collection, precise exceptions) I will discuss Java performance in detail, illustrating the above points by discussing the performance impact of sophisticated optimizations in the compiler and runtime system of JavaSoft's HotSpot compilers for SPARC and x86. I plan to end the talk by foolishly trying to predict the state of Java performance in the year 2000.