C/Java/Python/Objective-C在OS X上的性能实验
前几天看到一篇介绍python的文章:如何让python变得更快——http://www.codeproject.com/Articles/522217/Howplustoplusmakepluspythonplusfaster,这篇文章勾起了我的好奇心,同样的算法多种编程语言在Mac的OS X上跑会是个什么情况呢?
于是写了四种语言的斐波那契数列实现:C、Java、Python、Objective-C,而且都采用了效率最差耗时最长的递归实现,不使用其他数据结构或公式,这样对比起来更容易一些,如果使用迭代方式的话,执行时间太短很难比较。
第一轮测试不做任何优化,第二轮分别做一些编译和环境的调优处理,然后再看一下结果。代码如下:
C语言,使用函数实现递归计算
#include <stdio.h> long fib(int n){ if (n < 2) return n; return fib(n - 1) + fib(n - 2); } int main() { printf( "fib= %ld", fib(40) ); return 0; }
Java,使用静态方法实现递归计算
public class fib { public static long jfib(int n ){ if (n < 2) return n; return jfib(n - 1) + jfib(n - 2); } public static void main(String[] args) { System.out.println( jfib( 40 ) ); } }
Python,使用函数实现递归计算
def fib(n): if n < 2: return n return fib(n - 1) + fib(n - 2) print fib(40)
Objective-C,使用block实现递归计算
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { long (^__block fib)(long) = ^(long num){ if ( num < 2 ) return num; return fib(num-1) + fib(num-2); }; NSLog(@"Fib: %ld", fib(40) ); } return 0; }
基本的测试环境:
C语言:i686-apple-darwin11-llvm-gcc-4.2
Java:java version "1.6.0_37",HotSpot(TM) 64-Bit
Python:Python 2.7.2 with GCC 4.2.1
Pypy:PyPy 1.9.0 with GCC 4.2.1
Objective-C:2.0 with LLVM 4.1
使用time命令计算执行时间,例如time python fib.py
直接编译运行的结果还是比较让人吃惊的:
C:1 秒
Java:0.63 秒
Python:45.79 秒
Objective-C:1.3 秒
结果:Java > C > Objective-C > Python
这个结果让人感到,Java真的不慢,动态语言有点慢。
def fib(n): if n < 2: return n a1 = a2 = a3 = 1 while n>2: n -= 1 a3=a1+a2 a1=a2 a2=a3 return a3 print fib(40)
身边越来越多的人开始使用Mac,经常被问道Mac的使用问题和技术问题。遂决定,每天发布一则#Mac技巧#。同时发布于微博和微信公众账号“Mac技巧”,微信号sagacity-mac,有微信账号的童鞋扫描下图片或搜索微信号即可

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?