Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры.
Очень большая скорость разработки, легкий переход на новую версию, кросплатформенность, автоматическая оптимизация под софт.
Все тоже касается C#, ну кроме кросплатформенности... это очень спорная тема =)))