Java performance is now quite good - honestly at this point I'd even trade 10-15% speed for reduced memory if it were needed. This is a huge hurdle for desktop app adoption (Notes 8 regularly consumes 450MB+ memory with casual usage - 'nuf said). Biggest needs:
user defined value types (like C# struct) - to allow 'inline' class memory usage instead of via reference. Reduces references which are really adding up memory-wise with move to 64-bit.
Stack allocation via escape analysis - to reduce heap usage and GC
MVM - to help pool free heap space among all running programs
Other niceties:
unsigned primitives
tuples
reified generics (should have been done right from the beginning)
syntactic sugar to reduce redundant typing (java is very verbose)