Category Archives: c++

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

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

Posted in c++, design, java | Leave a comment

面向对象的纯C语言

前几天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能运行的平台比较有限。

Posted in c++, search engine | Tagged , , | Leave a comment