java原名c++++--
你想知道它对比c++开发效率高在哪里,就要看它--里面做了什么
做个简单的类比, java就像开车的自动挡c2驾照,c++就像是手动挡c1驾照
之所以用java,是因为java的运行时帮你做了很多事,你不需要自己去操作,丢给java的运行时去完成就好了,当然所有东西都是有代价的,那么我们来看,这些代价,都是什么
一个最重要的操作,就是java不允许用户手动管理内存,但随之而来的就是gc的问题
那这时候有两种方案,一种是,哦,gc会带来pause停顿,那么我们回去用c++了,然后手动管理内存,还有一种是,哦,gc会带来pause,那么我们努力优化gc,让pause尽可能降低
也就是一种是有问题,我们否定问题,不承认问题的存在,我们跟问题共存;还有一种是,有问题,我们解决它,就算无法完美滴解决,我们也努力滴逼近理想状态
前者就是很多执着于c++程序员的选择,后者就是java的zgc,shenandoah等新的gc策略所做的事
还有一个差异是编译结果,java通常编译产物是字节码,c,c++等可以编译成机器码,前者是jit,后者是aot,那么这又遇到了同样的选择,一种是,java编译不成机器码,我们回去用c++,还有一种,哦,java有编译成机器码的需求,那么我们努力,写一个编译器,将其编译成机器码
前者就是c++程序员,后者就是graal项目所做的事
另外一个不太引人注意的差异就是运行时的大小,也就是编译之后,包的大小,那又面临选择了,退回c++等语言的选择就不说了,java对此做出的反应是,我们先将运行时模块化,然后允许用户定制运行时,并在上面提到的graal里面,同样允许用户制作更小的运行时,也就是graal的substrate的svm,而不是jvm
还有比如c++调用c的api相对容易,那么这就是java的panama项目要解决的问题,还有java没有值类型,那这就是valhalla项目要解决的问题……
所以你看,这些问题,你用c++来手动解决,行不行?
可以
但是java好就好在,它帮你解决了这些问题,那么当你用java的时候
你失去的是语法上的混乱,得到的却是一大堆免费开源的工具
c++的语法特性特别多,比java多很多,它总是尝试让用户懂这个,懂那个,之后才能开发,最后发现,用户总是这不懂,那不懂,最后编写代码的过程变成了一个学习的过程,所以c++程序员永远在学习,终其一生,也不敢妄言说自己精通c++,但是java的学习,理论上从第二节课开始,就要编写各种小工具了,学个几周,其实大多数人已经可以说是掌握了java了,用数年,说精通一点问题没有,内容无非就那么点
总结一下,java比c++开发效率高在哪里,高在用java的时候,你可以不懂操作系统,不懂内存管理,不懂怎么优化代码,甚至不懂编程语言的各种复杂特性,就把代码写出来,而且运行的效率还挺高,比很多人手写的c++代码还要高,而且更可爱的是,这个世界上有一大堆开源的贡献者在帮你维护,制作这些工具,所以即便你不懂这个不懂那个,你也能写出软件来