从语言层面去讨论一个应用的性能是没有意义的,一次IO就把就把语言层面的优势给抵消掉了,在来一次网络,那就更耗时了,有了这两个大块头,语言层面的因素就基本不用考虑了,所以在一个应用中,提升IO和网络效率,才是最关键的因素
脱离使用场景单纯从语言层面去比较没有什么实质的意义。
比如计算密集型的应用场景下,那毋庸置疑c++的效率性能无可比拟的。
c++主要适用于底层的算法,Java主要擅长的应用层面高并发多任务的系统服务器端应用,看现在国内国外的大型后端服务都是使用Java开发,这得益于Java强大的社区生态使得企业级应用的开发变得简单高效,但是大型的计算密集型应用,比如游戏,证券核心系统、风控系统核心算法还是用的c/c实现的多些。
所以,没有哪个语言一定强于哪个语言,要看具体的使用场景,不同语言的擅长是不一样的。还有,一个系统也不是从头到尾就一种语言,大型的系统都是好多种语言并存的,不同的模块使用最合适的语言开发。
C++可以直接编译成计算机可识别的机器语言,Java需要通过JVM转换,也就是需要JVM中间层才能转换成计算机可运行的代码,从这个角度上看,你觉得JAVA的性能可能超过C++吗。
另外,据说JAVA的JVM都是C语言开发的,而C++又是C语言的升级版,我记得之前我曾经研究过,JAVA大概比C++慢30%左右吧,这个你可以自己去做下测试就知道了。
说JAVA性能超越C++那是吹牛逼骗不懂的人的。通俗点解释二者的差距,开发游戏用JAVA就足够了,尤其是手机游戏!但是开发证券交易系统等大型工程项目还得是C++上!凡是熟练掌握C++的人那都是真正的高手!从程序语言难易角度排序,最难的是C++,下来是JAVA,再下来是Python。剩下什么C,PHP,BASIC等都上不了台面不入法眼!
做过4年的RVM java虚拟机的实现。实际上,java的动态编译引擎的效率和效果,的确和大部分c++编译器编译出来的指令,在执行效率方面差不多。
额外引入的性能损失在GC(垃圾收集)引擎上,不论是分代式垃圾收集器还是marksweep等,这些引擎从监视对象创建,到扫描并回收对象,都需要消耗超过20%的性能。这就是java实际执行看起来比c++慢的原因。
但垃圾收集本身给java语言引入了内存管控的安全性,使得java语言代码,绝不会出现c++代码可能出现的缓冲区溢出,double free等很多致命的软件错误。这也是性能换安全的一个语言设计的平衡吧。