Java manages memory for the developer (garbage collection). Most C and C++ programs require developer discipline to manage allocated (new or malloc/calloc) memory. If unused memory is not released (via delete or free), that memory is locked up or lost until the program ends. This causes a loss of performance due to swapping and lack of adequate memory for operations. Java automatically releases memory when the objects is no longer in use (reference counting).
Java supports threads easily so that concurrent applications can be designed without a lot of effort. The applications run faster and are more responsive to user needs
Java support thread priority so tasks that should be run in the background will run only when the CPU cycles are available and not when you need heavy computation.