不同的开发语言在性能上的两个重要差别

June 5, 2011 by · Comments Off on 不同的开发语言在性能上的两个重要差别
Filed under: c++, design, java 

不同的开发语言在性能上的重要差别,除了编译执行与解释执行的效率之外,还有两个重要的差别,一个是方法调用的性能差别,另一个是对象的创建与回收效率。

前阵子用C++(我用的VC 2010)写一个搜索本地文件的小程序,把一段代码提取为方法之后(参数使用了引用避免对象拷贝的开销),竟然发现性能有非常明显的下降,这说明C++(准确地说是VC++)的方法调用成本是相当高的。

我们在用Java处理大量的计算和IO操作时,大量的对象产生与销毁,经常会导致频繁的Full GC,Full GC的时候系统的服务几乎停滞,大大影响了系统的性能。 因此Java的内存回收效率是非常低的。 另一个方面,我们在用java时,不论方法调用的层次有多深,都几乎不会影响系统的执行性能,说明java的方法调用性能是非常高的。

Perl社区曾尝试使用纯Perl移植Lucene,然后试图通过不断的profiling和tuning来改善Perl版本Lucene的性能,最终发现由于Perl语言方法调用的成本过高,且对象的频繁创建和销毁导致性能低下而未能如愿。 参考:
http://wiki.apache.org/lucy/MinimizingObjectOverhead

Digg This
Reddit This
Stumble Now!
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

面向对象的纯C语言

June 5, 2011 by · Comments Off on 面向对象的纯C语言
Filed under: c++, search engine 

前几天lucene的c语言版本Lucy发布0.1版本。Lucy的代码中使用了面向对象的C扩展Clownfish。

Clownfish是一种很小的面向对象的语言,用于定义面向对象的接口。Clownfish包含一个编译器,允许类用C语言或者一种host语言实现,或者两者的组合。最早Clownfish用于Kino Search中,后来KinoSearch演变为Lucy,Lucy中继续使用Clownfish。参考: http://search.cpan.org/~creamyg/KinoSearch-0.311/clownfish/lib/Clownfish.pm

其他的使用面向对象的C的方法:
http://www.bolthole.com/OO-C-programming.html
http://www.bolthole.com/OO-C-2.html
http://home.comcast.net/~fbui/OOC.html
http://www.accu.informika.ru/acornsig/public/articles/oop_c.html

当然也可以使用C++或者objective c,但object c能运行的平台比较有限。

Digg This
Reddit This
Stumble Now!
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)