现在java的执行速度和c++相比谁快?你怎么看?
从语言本身来说,当然还是c/C++性能好,但现在也分场景,看从哪个角度说。比如C/C++的机制本身就很快,一个函数调用只传指针,而Java需要传对象,这在复杂度高的程序里差别就很大了,但J***a开发框架较多,这些年虚拟机也不断提升性能,因此有了很大提高。不客气的说句话,记得学车的时候有个老师傅说,没有肉车,只有肉人,每个人写的代码快慢也因人而异吧
看了一下这些回答,有些人可能因为自己是做j***a的,见不得自己做的东西差,死都不承认j***a速度慢。为什么j***a比cpp慢?大家都说得差不多了我不想再啰嗦。我只想从其他方面反过来证明。
首先,j***a程序员是中国所有程序员里最多的!说句不好听的话,如果j***a的运行效率等于或者高于cpp,那么早就不存在cpp这门语言了,因为没有理由用它!cpp的缺点大家都知道,编写效率低(注意是编写效率,不是运行效率!这两者成反比!);复杂难理解;掌握这门语言需要先掌握操作系统;等等。
其次,现在那些追求高性能(也就是高运行效率)的服务器上面跑的程序是用什么语言写的?是c和cpp,没有j***a写的高性能服务器!j***a或者c#或者python或者php写的服务器那是玩玩的,你家oa或者erp或者其他mis可以用这些语言写,但此类系统软件追求的正是编写效率高!追求性能的服务器指的是科学计算类、游戏服务端类等等。
第三,某楼层回答说j***a编写出来的程序最终跟汇编写的程序一样,都是生成了机器码运行。我想问问层主,你懂汇编吗?会使用汇编写代码吗?最终生成的机器码是一样的吗?!你确定j***a生成的机器码不包含有罗里吧嗦一大堆没用的东西,而只有极少的部分是用于做正确的事情?!
我举个例子,同样是上山,比如我用汇编写实现是一条天梯从山底直通山顶,而用j***a实现是山路十八弯。机器码在同一台电脑运行速度一样所以这里人走路的速度一样(注意,任何语言包括解释型语言,其最终都是依靠机器码才能运行。机器码的运行速度一样是说明硬件速度固定,而不是j***a运行速度跟汇编一样!),你说是我走天梯直通上方先到山顶,还是走山路十八弯盘上去快?答案显而易见吧?!我建议该楼主好好看看我的回答,多学习多理解,避免扯淡误导跟您一样无知的萌新!
理论上一样快,有时候cpp快,有时候j***a快。
注意,我说的可不是“J***a一定比C++快”这种公认荒谬的神论,如果你不知道什么叫“有时”,那么请直接离开这个回答,因为你没资格继续看。
我估计有人肯定听了就不乐意了,什么?j***a一定比cpp慢才对,因为j***a是用虚拟机运行,虚拟机是c/cpp写的,所以可以得出j***a一定比cpp慢!
然而不是,因为j***a不是脚本语言。再次重申,j***a不是脚本语言!而上面提到的思维明显是把j***a当成脚本语言对待了。虚拟机本质上仍然是提供虚拟硬件,有一套自己的处理器指令集,不然你以为还要编译一遍是为了保密?另一个证明是,j***a真的能直接运行在硬件上(有虚拟机,那就一定能造出真机嘛),注意,是真的是直接运行在硬件上而不是什么用硬件集成一套其他语言编写的运行环境再运行。以前有过这种芯片,可惜推出之后没什么市场,最终也就消失在历史中了。不过这已经能证明j***a是基于硬件指令操作而不是基于什么其他高级语言翻译再操作的根本性质了。
有本事你给js或是其他什么脚本语言也造个真机出来?
正是因为这一特性,导致了j***a可以比c++更快。举个最容易理解的例子,c++创建一个对象需要4走个真正的cpu指令,而j***a只需要走1个虚拟机cpu指令。那么,1个虚拟机cpu指令需要用4个真正的cpu指令运行么,显然不需要。
如果看到这,你还是不相信j***a可以比cpp快的,甚至还想在下面留言用各种已经解释了可你还是理解不了的想法来反驳,那这里直接给你做一个随手就能来一个的例子。下面,就分别用cpp和j***a创建一百万个功能完全相同的对象,来测试执行耗时。
测试环境是MacBook pro2016款,jdk1.8.0-131,g++为4.2.1系统自带,clang为10.0.1(更适合编译未经优化的代码),那么结果如何呢?
首先登场的是c++,测试代码如下。可以看出都是最基本的操作,哪怕是初学者都能轻松看懂: