为什么说Java比C / C++ 慢?
展开全部
的确,不可否认,
Java运行效率上比C/C++是要慢一些,但随着JVM
/
JIT的不断升级优化,这种速度上的差异会越来越小
。
Java运行效率上比C/C++是要慢一些,但随着JVM
/
JIT的不断升级优化,这种速度上的差异会越来越小
那为什么说Java比C/C++运行效率上要慢呢?且听我说:
1、Java是解释型语言、C/C++是编译型语言:
C++可以理解为是C语言的升级扩展版本,C/C++的程序编译出来的是
机器码
,可以被CPU直接加载执行的;而Java编译出来的是
字节码
,然后要通过JIT编译器“翻译”为机器码,然后再被JVM加载执行。
Java中间多了个翻译过程
。
机器码
字节码
Java中间多了个翻译过程
两种语言的执行过程大概如下:
Java:
程序
》编译
》字节码
》JVM
加载处理
》机器码
》执行
C/C++:
程序
》
静态编译器
》
机器码
》执行
2、Java其实是运行在JVM(虚拟机)上的:
Java的跨平台其实靠的就是与系统无关的字节码与JVM来实现的,JVM可以理解为是一个虚拟机系统,Java程序是跑在JVM上面的(JVM底层是用C实现的)。
所以Java的性能还受JVM的配置影响。
所以Java的性能还受JVM的配置影响。
而C/C++编译的程序是不需要跑在虚拟机上的。
3、Java语言特性带来的性能开销:
Java采用的是动态链接、C/C++采用的是静态链接,所以两者性能上差距是有的。
另外JVM还会进行其它一些操作,如:字节码加载、类型检测、GC垃圾回收、类型转换等等,这些操作也是要耗时的。
综上,Java运行效率比C/C++要慢一点,是存在的,但随着JVM及JIT的不断优化,这种速度上的差异只会越来越小。另外,
Java是牺牲了部分性能来换取“一次编写、到处运行”的跨平台实现,也是值得的
。
Java是牺牲了部分性能来换取“一次编写、到处运行”的跨平台实现,也是值得的
Java运行效率上比C/C++是要慢一些,但随着JVM
/
JIT的不断升级优化,这种速度上的差异会越来越小
。
Java运行效率上比C/C++是要慢一些,但随着JVM
/
JIT的不断升级优化,这种速度上的差异会越来越小
那为什么说Java比C/C++运行效率上要慢呢?且听我说:
1、Java是解释型语言、C/C++是编译型语言:
C++可以理解为是C语言的升级扩展版本,C/C++的程序编译出来的是
机器码
,可以被CPU直接加载执行的;而Java编译出来的是
字节码
,然后要通过JIT编译器“翻译”为机器码,然后再被JVM加载执行。
Java中间多了个翻译过程
。
机器码
字节码
Java中间多了个翻译过程
两种语言的执行过程大概如下:
Java:
程序
》编译
》字节码
》JVM
加载处理
》机器码
》执行
C/C++:
程序
》
静态编译器
》
机器码
》执行
2、Java其实是运行在JVM(虚拟机)上的:
Java的跨平台其实靠的就是与系统无关的字节码与JVM来实现的,JVM可以理解为是一个虚拟机系统,Java程序是跑在JVM上面的(JVM底层是用C实现的)。
所以Java的性能还受JVM的配置影响。
所以Java的性能还受JVM的配置影响。
而C/C++编译的程序是不需要跑在虚拟机上的。
3、Java语言特性带来的性能开销:
Java采用的是动态链接、C/C++采用的是静态链接,所以两者性能上差距是有的。
另外JVM还会进行其它一些操作,如:字节码加载、类型检测、GC垃圾回收、类型转换等等,这些操作也是要耗时的。
综上,Java运行效率比C/C++要慢一点,是存在的,但随着JVM及JIT的不断优化,这种速度上的差异只会越来越小。另外,
Java是牺牲了部分性能来换取“一次编写、到处运行”的跨平台实现,也是值得的
。
Java是牺牲了部分性能来换取“一次编写、到处运行”的跨平台实现,也是值得的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java程序和c程序都需要CPU来运行。
区别是c和c++程序编译后的可执行文件是
机器码
,cpu认识它们,可以直接加载并运行:
机器码
c程序--(编译器)-->机器码-->运行
java程序编译出来的则不是机器码而是字节码,需要由java
虚拟机
先把字节码转化为机器码,然后才能在CPU上运行:
虚拟机
java程序--(编译器)->字节码--(虚拟机)->机器码-->运行
java程序--(编译器)->字节码--(虚拟机)->机器码-->运行
java比c多了一个从字节码转化为机器码的过程,所以java运行慢。
java比c多了一个从字节码转化为机器码的过程,所以java运行慢。
所以说java是一种解释性语言,c是一种编译性语言。
区别是c和c++程序编译后的可执行文件是
机器码
,cpu认识它们,可以直接加载并运行:
机器码
c程序--(编译器)-->机器码-->运行
java程序编译出来的则不是机器码而是字节码,需要由java
虚拟机
先把字节码转化为机器码,然后才能在CPU上运行:
虚拟机
java程序--(编译器)->字节码--(虚拟机)->机器码-->运行
java程序--(编译器)->字节码--(虚拟机)->机器码-->运行
java比c多了一个从字节码转化为机器码的过程,所以java运行慢。
java比c多了一个从字节码转化为机器码的过程,所以java运行慢。
所以说java是一种解释性语言,c是一种编译性语言。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询