回到问题本身。我认为可以从跨平台、垃圾回收、生态三个方面来阐述。
跨平台
首先java是跨平台的,不同平台执行的机器码是不一样的,而Java因为加了一层中间层JVM,所以可以做到一次编写多平台运行,即【Write once,Run anywhere】。
编译执行 过程是先把java源代码编译成字节码,字节码再由JVM解释或JIT编译执行,而因为JIT编译是需要预热的,所以还提供了AOT(Ahead-of-Time Compilation ),可以直接把字节码转化成机器码,来让程序重启之后能迅速运行。
(解释执行比编译执行效率差,你想想每次给你英语让你阅读,还是直接给你看中文,哪个快?)
垃圾回收
Java还提供垃圾自动回收功能,虽说手动管理内存意味着自由、精细化地掌控,但是很容易出错。
在内存较富裕的当下,将内存的管理交给GC来做,减轻了程序员编程的负担,提高了开发的效率,更加划算。
生态
现在Java的生态圈太全了,丰富的第三方类库,网上全面的资料、企业级框架、各种中间件等等。