五千年(敝帚自珍)

主题:【原创】Java和.NET哪个运行的更快? -- Highway

共:💬24 🌺19
全看分页树展 · 主题 跟帖
家园 Garbage collector是Java,.NET的核心部分之一。

其任务很明确:将程序员从繁琐枯燥的Memory Management任务中解放出来,让他们把精力集中到要完成的任务本身上去。

Java和.NET的研制人员都考察过现有的C++的问题。其中资源管理不当是C++程序Bug的一个最主要来源。并且在很多时候这些Bug非常难发现和修改,比如memory leak,有时候要运行很长时间才有可能重现问题。That's really hard to track and debug。

狂扁Garbage collector的C++程序员们都认为自己是C++ guru,那些错误他们根本不会犯。事实上是不是这样我就不知道了。就我个人经历而言,真正的C++大牛都是非常Open minded的。Java以及.NET的设计者都是C++/Unmanage Code出身的,他们之所以创建Java和.NET是因为他们感受到了C++的问题,想提供一个更安全,工作效率更高的环境给广大的程序员。事实上,Java, C#都可以看作是C++派生出来到语言。认为Java和C#是一种倒退是可笑的。

Java以及.NET并不适合所有的任务,C++也是。比如开发Web程序,C++就不合适。而写Device Driver,Java以及.NET就不能胜任。

Garbage collector帮我们解决了很多问题。但并不是程序员从此就不需要考虑资源管理问题了。事实上,有些问题还是很tricky的。比如你是用C#写程序,是不是要给你的Class提供Finalize() Method就是一个难度很大的问题,它极大的影响GC的工作。但我估计很少有人考虑过这个问题。

Garbage collector的内存管理效率比C/C++低吗?这个问题也很难回答。在memory allocate一端,GC非常快,比C/C++还快;在确认un-reachable object, reclaim memory以及Re-arrange heap上GC要花一些时间,对程序性能有影响。所以你的程序最终表现如何,要看你的程序特性了,比如GC是不是要频繁出动。GC在时间上的不确定性对不少应用造成了一些困难,尤其是Java。但对于绝大多数应用而言,我不认为那是一个问题。

微软现在已经将重心转移到了.NET上,虽然Visual C++一直是微软的看家工具,这很说明一个问题,不是吗?

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河