有个从表面上看起来很奇怪的事实是:司机戴安全带比不带安全带时发生的行车事故要多。不带安全带时,司机死亡率比较高,但是带了安全带时,司机死亡率是降低了,但是行人死亡率却提高了。不带安全带时,司机需要谨慎缓慢的开车,带了安全带,司机却会 更快,更放肆地开车。 
这个方面的资料 可以看下 Automobile Safety Regulation and the Incentive to Drive Recklessly:Evidence from NASCAR 和Automobile Safety Regulation编程语言,从一种不安全语言(比如c/c++)发展到一种相对安全语言(比如C#)时,语言上安全程度提高,并不因此能够大量的减少项目事故,只能减少对开发人员威胁程度而已。而对于客户平均威胁程度却是提高了。 
安全性高的语言,就像司机有了安全带一样,使得原本那些担心做不好而使得自己饭碗不保地不合格开发人员更加-------放肆了。同样的项目 用c/c++开发,开发人员知道c/c++极易出错,开发速度故而缓慢,谨慎。尽量避免在开始就出错。项目运行时,初期出错。小错误还好,如果是系统崩溃之类的错误,有麻烦的是开发人员。用C#开发,则因为C#和.net平台有各种各样的保证机制。相对不容易出错,比如c/c++中最麻烦的内存,资源回收和指针问题。项目运行初期也很难发现.等运行一段时间之后,出错了很有可能就需要重新设计了。开发语言虽安全,请各位"新人司机"缓慢,谨慎驾驶。 ------------------------------------------------------------------------
下面是一些主要回复robbin     3 天前 
我觉得你说的不对。如果像Java这种运行在VM上面,没有指针操作,比较安全的语言,即使内存泄漏,我都不会有太大担心,大不了重起JVM呗,有JVM作为一个安全的保障,不会危及操作系统。但是C/C++就不一样,这些东西一旦内存泄漏,就根本找不回来了,不重起整个操作系统,根本就没有戏,可以说危害极大。其实很多Java开发的大型系统都有或轻或重的内存泄漏问题,即使很多大型企业的关键应用都是如此。但是很多大型行业应用,往往在晚上都会停掉AppServer进行备份和数据维护,因此只要你能够保证24小时连续运行内存泄漏不超出物理内存限制,也就不是什么问题了。但是C/C++开发的系统,内存一旦泄漏,由于没有VM的安全保障,只能等待重起操作系统,但是对于这些行业应用来说,重起操作系统根本就是不可以接受的,你想,光是重起小型机操作系统,往往都要半个小时,你能受的了?另外我带过一些人做Java,也做VC开发,我就发现他们写Java程序,基本不出大的问题,但是写起来VC程序,到处都是内存泄漏,程序都不堪一用。你不能指望程序员在使用不同的编程语言的时候,自己提高警觉,这是不现实的。根据我的经验,做VC开发的人出现内存泄漏问题远远超过做Java开发的。

解决方案 »

  1.   

    ddd 写道
    robbin 写道但是C/C++就不一样,这些东西一旦内存泄漏,就根本找不回来了,不重起整个操作系统,根本就没有戏,可以说危害极大。 
    你说的这个用c/c++做的系统包含操作系统么? 
    如果不包括的话,应用程序内存泄露是无所谓的,用不着重起操作系统. 
    当然有所谓,而且大有所谓!就拿我亲身经历来说吧。刚购买这台AMD64服务器,安装Linux x86_64之后,我在上面编译安装好PHP4,就发现内存一直泄漏(那时候还没有迁移到JavaEye2.0),一天下来物理内存有超过2GB被泄漏掉了,纵然我有4GB物理内存,也搞到操作系统不得不使用swap,无论你怎么重起apache都不管用,就是把服务器上面所有程序全部关掉,物理内存仍然只剩下不到1GB,那3GB物理内存不翼而飞了,这就叫内存泄漏!搞的我每天晚上不得不重起一次服务器,否则只要连续跑上48小时,物理内存就一点不剩,服务器就得失去响应了,我根本就束手无策。后来迁移到JavaEye2.0,停掉PHP,改用ruby,并且重起了一次服务器之后,就一切恢复正常了,我后来推测可能是PHP4和x86_64操作系统兼容性不好导致的内存泄漏。这种内存泄漏,要是搁在Java,我每天晚上重起一下tomcat,也没啥大不了,Java的内存泄漏仅仅造成JVM崩溃,不会殃及整个操作系统的内存管理,要是C/C++那种直接从操作系统申请的内存要是泄漏掉,就再也找不回来了,危害实在是太大了。
      

  2.   

    hehe  楼主还有这样的兴趣
      

  3.   

    java的安全性好点
    但是太慢了
    c++内存释放太麻烦了
      

  4.   

    可能是个笑话,估计大家也听说过美国发射的火箭因为一句if (x = 3)而自毁
      

  5.   

    这个故事的后续版本是:于是Java的发明者们决定,Java语法的逻辑判断只接受布尔值,而不允许整型