其实,我的主要意思是这段话:
既然那些因素会影响程序效率,那为什么不绕开它呢。优化的技巧是多种多样的,必须结合平台和编程语言特性,扬长避短。
垃圾回收机制的确会影响性能,但它也有好处的。
先不用STL等数据结构库情况下用那些纯编译型的编程语言写个链表程序
再用Java、.Net写同样的程序(当然不是使用它们的类库,而是自己一个个地new出链表节点)
现在填充大量节点数据看看
你会郁闷的发现,那些纯编译的代码居然没有虚拟机速度快
这是因为,一般编程工具的内存分配函数调用的是操作系统的内存分配功能,而操作系统的堆分配函数本来就不是为分配大量小型对象服务的。所以许多数据结构经典教材会推荐我们自己写个内存分配器,专门处理链表节点这样的小型对象内存分配,这就是为什么现在推崇STL。
而那圾回收机制,最初就是为了解决这样的问题而设计的,能够应付i这样的大量小型对象分配问题。
其实我也不喜欢像Java、.Net,因为它们是专门为Web服务设计的,所以许多测试结果具有欺骗性。但就是因为这样,我曾经认真分析过它们性能。结果发现,对于现在那些编程初学者所接触的那些领域,Java、.Net已经优化到了极致,看起来似乎确实速度很快。而对于传统领域,那当然不能比的。
[ Last edited by zyl910 on 2006-7-11 at 22:25 ]
Originally posted by zyl910 at 2006-7-11 15:20:
而且现在是调用中断
时间主要耗在中断服务程序上
即此时的瓶颈是硬盘读写速度
Originally posted by asbai at 2006-7-11 20:46:
具体来说,使用了垃圾回收和自动存储管理;无类型变量;反射等机制的语言本身就是低效的。这样的语言即使直接编译成机器码也快不起来,有意思的是,这样做甚至会更慢,IBM知识库里有一篇文章专门测量了各种情况下,Java运行的效率:Weighing in on Java native compilation(http://www-128.ibm.com/developerworks/library/j-native.html)。
既然那些因素会影响程序效率,那为什么不绕开它呢。优化的技巧是多种多样的,必须结合平台和编程语言特性,扬长避短。
垃圾回收机制的确会影响性能,但它也有好处的。
先不用STL等数据结构库情况下用那些纯编译型的编程语言写个链表程序
再用Java、.Net写同样的程序(当然不是使用它们的类库,而是自己一个个地new出链表节点)
现在填充大量节点数据看看
你会郁闷的发现,那些纯编译的代码居然没有虚拟机速度快
这是因为,一般编程工具的内存分配函数调用的是操作系统的内存分配功能,而操作系统的堆分配函数本来就不是为分配大量小型对象服务的。所以许多数据结构经典教材会推荐我们自己写个内存分配器,专门处理链表节点这样的小型对象内存分配,这就是为什么现在推崇STL。
而那圾回收机制,最初就是为了解决这样的问题而设计的,能够应付i这样的大量小型对象分配问题。
其实我也不喜欢像Java、.Net,因为它们是专门为Web服务设计的,所以许多测试结果具有欺骗性。但就是因为这样,我曾经认真分析过它们性能。结果发现,对于现在那些编程初学者所接触的那些领域,Java、.Net已经优化到了极致,看起来似乎确实速度很快。而对于传统领域,那当然不能比的。
[ Last edited by zyl910 on 2006-7-11 at 22:25 ]
人类存在的目的就是试图理解人类为何存在





