取代java_为什么C++没有被java取代

c6779707cc57f90e24558dbc05be25df.png

关于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文件在虚拟机上运行的时候,还会有很多的优化措施。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值