java为什么没有c/c++运行速度快

 我来答
百度网友0358a60
2017-10-19 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:147
采纳率:0%
帮助的人:56.6万
展开全部
回答错误太多。
1、Java不一定效率就比C++低。一般情况下,Java的效率和C++处于一个数量级,少数情况下Java会比C++更快。
2、现在根本没有所谓的解释性语言和编译性语言之分。Java一样能通过jaotc,gcj或者Excelsior Jet之类的编译器编译成机器码,C++一样能够通过解释器解释执行
3、Java虚拟机的主流实现Hotspot里自带一个JIT编译器,能够把字节码编译成机器码。JIT虽然需要运行时编译,但是能够做更多优化,“效率高低显而易见”根本是无稽之谈。
4、“比如java程序不能直接管理内存”更是错错错,通过Unsafe或者JNI,Java应用意义能够直接管理内存,譬如Spark的一部分就是自己管理了一块内存。
5、“虽然这样会造成程序员的工作量加大,但是内存的利用率肯定是比java要高的”更是错的,gc比人工管理要靠谱多了,C++里的内存泄露到现在都无法避免。
6、“个人感觉应该是垃圾回收的问题”也是错的,Java应用吃内存主要还是过多的new以及JVM本身占用的原因,gc的影响相对来说要小得多。
7、“虚拟机就相当于一个操作系统”“通过虚拟操作系统将指令传递到实际操作系统肯定是效率较低的”简直错到离谱,JNI和JIT都被你吃了啊?
1435397496
2017-04-12 · TA获得超过697个赞
知道小有建树答主
回答量:317
采纳率:96%
帮助的人:177万
展开全部

从几个方面讲:

  1. 首先,java和C/C++是不同类型的语言,java是解释型语言,C/C++是编译型语言,效率上肯定是编译型语言要高。为什么这么说呢?所谓解释型语言就是不实际生成可执行代码,比如java编译后生成的是.class字节码,然后通过java虚拟机去解释这个字节码然后生成二进制代码,计算机去执行解释后的二进制代码,这就经过一次翻译。而编译型语言生成的直接就是计算机可识别的二进制代码。效率高低显而易见。

  2. 其次,java不能直接与系统或者硬件设备打交道,全都是通过jvm虚拟机来执行的。比如java程序不能直接管理内存,而是所谓垃圾收集器管理的,垃圾收集何时执行时不确定的。而C/C++可以直接管理内存,通过指针,在堆上的对象创建和销毁要全部依赖程序员来完成。虽然这样会造成程序员的工作量加大,但是内存的利用率肯定是比java要高的

  3. 还有,java的执行需要一个虚拟机环境,这个东西是比较吃内存的,有过java编程经验的人都知道,eclipse/myeclipse之类的工具执行起来占用的内存比较大。个人感觉应该是垃圾回收的问题,因为垃圾回收不定时,所以其实内存中存在很多已经被废弃的对象,但是它们还占用着内存。虚拟机就相当于一个操作系统,在实际的操作系统上跑一个操作系统,然后java程序在虚拟操作系统上运行,通过虚拟操作系统将指令传递到实际操作系统肯定是效率较低的。C/C++不存在这种问题,它们生成的程序都是直接运行在实际的操作系统上面的

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式