为什么C++没有被java取代
关于java虚拟机和Class文件格式, 貌似很厉害的样子,那肯定有人疑问,为什么 c/c++这些不能跨平台的语言,还现在还被很多人使用,还没被java取代呢。
当然,这个原因有很多,比如java的gc过程所无法避免的stop the world过程,这在 某些实时性要求比较高的 系统中,比如 股票交易系统,军事系统,是不可接受的。(关于垃圾回收这是另一个话题,不在本文范围内,未来有时间可以花时间另写博客讨论这个问题)。
不过有句话说的很好
java和c++之间有一堵由动态内存分配和垃圾收集技术所围成的'高墙',墙外的人想进去,墙内的人想出来
另外,对于直接与硬件交互的事情,也只能靠C语言了。毕竟上层再怎么发展,硬件与系统之间永远要存在一个驱动层啊。
但是除了以上这些,还有一个原因。给大家讲讲软件历史上的一个重大教训,大家也许就明白了。
当年为了对抗sun的java平台,微软2002年推出了类似中间件思想的.NET平台(C#)。当时window xp一统江湖,让微软如日中天,不可一世,微软在下一代操作系统(就是window visa)的开发中,决定使用 C#, 虽然微软牛逼哄哄,拥有最牛逼的程序员,最顶尖的科学家,但是开发到最后他们发现,使用C#这种运行在虚拟机上的中间件语言,无论如何也达不到 C/C++语言的速度。所以最后悲剧的 window visa,全部推倒重来,重新开发。当时李开复在微软,他的一本书中对此有详细介绍。
当然,当年window visa项目的失败,还有其他一些原因,比如 使用数据库系统代替文件系统,驱动不兼容等, 但是 使用.NET来进行开发,起码也是失败的主要原因之一。
所以现在大家明白了,ByteCode运行在虚拟机上,相比于直接编译成 NativeCode 运行在物理机上,速度较慢。
现在随着虚拟机运行时优化技术的发展,以及硬件的速度越来越快,所以它们速度之间的差异,也没之前差距那么大了。
实质上,Class文件在虚拟机上运行的时候,还会有很多的优化措施。
原文链接:https://www.qiquanji.com/post/7572.html
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
微信扫码关注
更新实时通知