Java是否真的能够在基础软件领域强有力地替代C语言呢?
Java是否真的能够在基础软件领域强有力地替代C语言呢
1、人的问题
能够用C语言写出基础软件的人固然不多,能用Java写出来的人恐怕更少。Java有好几百万开发者,但是他们在干什么?大部分是去搞企业级开发、Web开发了,有多少人真的理解Java的内存模型?有多少人能够熟练使用concurrent包中提供的那些工具?很多使用Java多年的人没有写过socket程序,不了解Java多线程的开销,不清楚如何进行性能诊断和调优,而这些在写基础软件的时候是*备的技能。大部分Java程序员在刚刚学会Java之后就转向Web开发,把主要精力花费在掌握一个又一个大型的、复杂的、具有厚厚的抽象层和华丽结构的frameworks上,不但对真实计算机体系结构不清楚,对于Java虚拟出来的那个计算环境也不清楚。因此,要把Java社群编程转变成能够担负起下一代基础软件开发工作的尖兵,不但难度很大,而且*花费足够的时间。
2、Java的内存消耗太大
对于系统级程序来说,内存消耗大,就意味着cache*降低,与磁盘交换数据的可能性增大,对性能的影响还是比较严重的。现在很多人还是觉得Java慢,主要的原因已经不是Java跑得慢,而是由于内存消耗过大导致的综合性能下降。这个问题不解决,Java就只能用来做一些比较上层的基础软件。也许随着计算机硬件的发展,这个问题会逐步得到解决?
3、风格的问题
这个问题我认为是较严重的。基础软件开发崇尚的是自由、直接、透明、简单、gao效,要像匕首一样锋利,像战士一样勇猛,像农夫一样朴实,反对繁琐华丽的设计,反对架床迭屋的层层抽象,反对复杂的结构和不必要的灵活性。而Java社群多年来形成的设计风格与此格格不入,甚至可以说是对立的。Java在意识形态上是要面向企业应用软件的开发,所以特别强调架构,强调设计模式,强调标准,强调规规矩矩,强调高姿态,强调一种华贵的宫廷气质。在C中,你吃饭就是吃饭,捧起碗来喝酒,放下筷子骂娘,甩开膀子抓肉,撸起袖子抹油。而在Java中,你经常为了要干某件事,先new一个对象,然后以这个对象为参数new另一个对象,如此这般重复n遍,得到真正需要的对象,较后就是为了调用那个对象的一个方法,就好比吃饭时焚香洗面,漱口净手,战战兢兢,毕恭毕敬。在C中,遇到问题要像亡命徒,像流氓版程咬金,管你三七二十一,冲上去就是三板斧,还怕劈不死你丫的。在Java里,遇到问题要像宋襄公,要张榜檄文,要名正言顺,要礼仪之邦,要把架子拉开了,把谱儿摆足了。Java的口号是,不管劈不劈的死,先把你小子感动了再说。 这套繁琐的东西,对于基础软件开发来说,既不必要,也很难习惯。需要说明的是,这不是Java语言的问题,其实Java本身不必如此复杂、如此巴洛克。从语言本身来看,Java也可以是轻快直接的,也可是酣畅淋漓的。只*十多年来几乎没有人这样用过,所以大家已经不知道:如果不来个一步三叩首,那么该怎么用Java写程序?
正是因为上面的这种种原因(可能还不全面),直到较近,第的基础软件几乎都还是C语言编写的,或者至少其核心部分还是以C为主。而且我认为,在短期内,这种局面不会有大的改变。当然,如果Java社群能够克服上面的这些问题,充分发挥出Java本身的优势,在基础领域开发出一大批的支撑软件,那么局面是可以改变的,而且这种改变也是进步的,值得欢迎的。
更多培训课程,学习资讯,课程优惠等学校信息,请进入 杭州IT培训杭州上城区php培训杭州上城区java培训 网站详细了解,免费咨询电话:400-998-6158