Java和C++有什么区别?对于软件的性能优化哪个好?
您好!我想向您提一个问题,在数不清的编程语言中有Java和C++这两种,它们有什么区别呢?对于一些很吃配置的软件哪个优化好?最后,还是要感谢您,谢谢。...
您好!
我想向您提一个问题,
在数不清的编程语言中有Java和C++这两种,
它们有什么区别呢?
对于一些很吃配置的软件哪个优化好?
最后,还是要感谢您,谢谢。 展开
我想向您提一个问题,
在数不清的编程语言中有Java和C++这两种,
它们有什么区别呢?
对于一些很吃配置的软件哪个优化好?
最后,还是要感谢您,谢谢。 展开
1个回答
展开全部
C++ 在大部分的情况下都比 Java 要快,有几个数值方面的基准测试的研究争辩说 Java 在某些情况下可能会比 C++ 的性能好得多。但有人说数值方面的基准测试对于语言的评估是不合适的,因为编译器都可以做相关的优化,甚至可能将被测试的代码彻底删除。 如果涉及到一个真正现实应用的程序,Java 会因为很多原因导致性能变差:
所有的对象都在堆里被申请。对于使用小对象的函数来说会导致很大的性能损失,因为在栈里申请内存几乎没有性能损失。
方法缺省是虚的。这对于小对象来说会因为虚表增加好几倍的内存使用。它也会引起性能损失,因为 JIT 编译器不得不对查虚表的过程做额外的优化。
即使使用标准的容器依然会有很多的类型转换,这会引起性能损失,因为需要遍历整个继承树。
虚拟机更进一步增加了内存的使用,因此降低了内存的局部性,增加了缓存命中失败率,从而导致整个程序变慢。
缺乏低级细节的操作方式使得开发者无法将程序进一步优化,因为编译器不支持。
有人争论说,和 Java 相比 C++也有很多劣势:
指针使得优化变得困难,因为它们可能指向任意的数据。当然现在这一点也并非完全正确,因为一些现代的编译器引入了 "严格别名" 的规则 并且支持 C99 的关键字 restrict,从而严格限制了指针的使用,使其只能用于指向已知的变量
Java 的垃圾搜集和使用malloc/new来申请内存相比能拥有更好的缓存连贯性,因为它的申请一般来说是顺序的。然而,始终有争论认为二者同样会导致内存的“零碎化”(即多次分配和回收之后内存空间会变得不连续),且并没有哪一个比对方有更明显的缓存优势。
运行时编译可能可以更好的优化代码,因为可以利用运行时的额外的信息,例如知道代码是在什么样的处理器上运行。然而当今的情况也并非完全如此,因为当前最先进的 C++ 编译器也会针对不同系统生成不同的目标代码,以期充分利用该系统的计算能力
此外,有争议的是,花在更复杂的 C++ 代码上的 debug 时间太多,用 Java 开发完全可以把这些时间用来优化 Java 代码。当然对于一个给定的程序来说两种语言能优化到什么程度也是一方面。最后,对于处理器负担很重的情况,例如视频渲染,C++ 能直接访问硬件,在同样一个硬件规格下 C++ 总是会比 Java 的表现好很多。
所有的对象都在堆里被申请。对于使用小对象的函数来说会导致很大的性能损失,因为在栈里申请内存几乎没有性能损失。
方法缺省是虚的。这对于小对象来说会因为虚表增加好几倍的内存使用。它也会引起性能损失,因为 JIT 编译器不得不对查虚表的过程做额外的优化。
即使使用标准的容器依然会有很多的类型转换,这会引起性能损失,因为需要遍历整个继承树。
虚拟机更进一步增加了内存的使用,因此降低了内存的局部性,增加了缓存命中失败率,从而导致整个程序变慢。
缺乏低级细节的操作方式使得开发者无法将程序进一步优化,因为编译器不支持。
有人争论说,和 Java 相比 C++也有很多劣势:
指针使得优化变得困难,因为它们可能指向任意的数据。当然现在这一点也并非完全正确,因为一些现代的编译器引入了 "严格别名" 的规则 并且支持 C99 的关键字 restrict,从而严格限制了指针的使用,使其只能用于指向已知的变量
Java 的垃圾搜集和使用malloc/new来申请内存相比能拥有更好的缓存连贯性,因为它的申请一般来说是顺序的。然而,始终有争论认为二者同样会导致内存的“零碎化”(即多次分配和回收之后内存空间会变得不连续),且并没有哪一个比对方有更明显的缓存优势。
运行时编译可能可以更好的优化代码,因为可以利用运行时的额外的信息,例如知道代码是在什么样的处理器上运行。然而当今的情况也并非完全如此,因为当前最先进的 C++ 编译器也会针对不同系统生成不同的目标代码,以期充分利用该系统的计算能力
此外,有争议的是,花在更复杂的 C++ 代码上的 debug 时间太多,用 Java 开发完全可以把这些时间用来优化 Java 代码。当然对于一个给定的程序来说两种语言能优化到什么程度也是一方面。最后,对于处理器负担很重的情况,例如视频渲染,C++ 能直接访问硬件,在同样一个硬件规格下 C++ 总是会比 Java 的表现好很多。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询