为什么说java比C / c++ 慢?
区别是c和C++程序编译后的可执行文件是机器码,cpu认识它们,可以直接加载并运行:
c程序--(编译器)-->机器码-->运行
j***a程序编译出来的则不是机器码而是字节码,需要由j***a虚拟机先把字节码转化为机器码,然后才能在CPU上运行:
j***a程序--(编译器)->字节码--(虚拟机)->机器码-->运行
j***a比c多了一个从字节码转化为机器码的过程,所以j***a运行慢。
所以说j***a是一种解释性语言,c是一种编译性语言。
的确,不可否认,J***a运行效率上比C/C++是要慢一些,但随着JVM / JIT的不断升级优化,这种速度上的差异会越来越小。
那为什么说J***a比C/C++运行效率上要慢呢?且听我说:
1、J***a是解释型语言、C/C++是编译型语言:
C++可以理解为是C语言的升级扩展版本,C/C++的程序编译出来的是机器码,可以被CPU直接加载执行的;而J***a编译出来的是字节码,然后要通过JIT编译器“翻译”为机器码,然后再被JVM加载执行。J***a中间多了个翻译过程。
两种语言的执行过程大概如下:
J***a:
程序 》编译 》字节码 》JVM 加载处理 》机器码 》执行
C/C++:
程序 》 静态编译器 》 机器码 》执行
2、J***a其实是运行在JVM(虚拟机)上的:
J***a的跨平台其实靠的就是与系统无关的字节码与JVM来实现的,JVM可以理解为是一个虚拟机系统,J***a程序是跑在JVM上面的(JVM底层是用C实现的)。所以J***a的性能还受JVM的配置影响。
而C/C++编译的程序是不需要跑在虚拟机上的。
1.C++是编译型语言,j***a是解释型语言,普遍来讲,编译型语言要比解释型语言速度快。
2.C++是在C语言的基础上增加了新的语法和面向对象的机制,更加接近C语言,也就意味着更加接近底层硬件,越接近于硬件,运行速度越快。
3.j***a是纯面向对象的语言,实现了大量类的封装,体系比较庞大,对于j***a程序员来说,底层硬件可以说是透明的,所以想要优化效率是不容易的。
4.j***a慢于C++的一个重要原因就是j***a是运行在j***a虚拟机上,虚拟机的也需要时间开销。
5.总的来说,C++的效率大概是j***a的3到4倍,但是现在CPU的速度已经很快了,这种几倍的效率问题CPU已经可以完全屏蔽了。
j***a这门技能如何自学?
对于很多计算机专业的同学来说,在学习编程语言的过程中,要想有一个较好的学习体验,应该从构建场景入手,这个场景就是交流场景和实践场景,编程语言说到底就是一种工具,只有多使用才能逐渐熟悉,才能形成自己的编程思想。
学习编程语言通常需要经过三个阶段,第一个阶段是理论知识学习阶段,第二个阶段是场景实践阶段,第三个阶段是总结阶段,逐渐形成自己的方法论。
第一个阶段的重点是理解各种抽象的编程概念,要通过大量的实验来为抽象概念建立起画面感,这个阶段的难度并不算大,但是一定要多动手做实验,很多概念的理解都是在实验的过程中逐渐递进的。J***a语言本身的抽象程度就比较高,所以很多概念不通过实验是很难理解的。
在完成了第一个阶段的学习之后,要进一步进行场景实践,要结合具体的应用场景来使用编程语言,这是非常重要的环节,只有经过了这个环节,才算真正掌握了一门编程语言。J***a语言是全场景编程语言,所以对于场景的适应能力是非常强的,初学者可以从Web场景开始入手,相关的案例也比较多,会有一个较好的学习体验。
场景实践的重点是要有交流环境,在实践的过程中进行交流是非常高效率的,可以通过交流来促进对于各种概念的理解,从而解决实际开发场景中遇到的问题。场景实践的过程是掌握方法的过程,掌握了方法自然在以后遇到相同场景时就可以复用了。
第三个阶段是总结阶段,总结阶段就是形成自己编程思想的过程,也是提升的阶段,这个阶段同样离不开交流,尤其要重视与技术专家进行交流。
我从事教育、科研多年,目前在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。