热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phppython性能_Java,Python,Ruby,PHP,C等语言性能对比

代码功能:循环拼接字符串,并替换子字符串硬件环境:IntelCore2DuoT75002.20GhzCPU;2GBRAM;OSDebia

代码功能:循环拼接字符串,并替换子字符串

硬件环境:Intel Core2 Duo T7500@2.20Ghz CPU; 2 GB RAM; OS Debian GNU/Linux 2.6.32 i686

代码执行时长

14142908_AExs.png

代码性能对比图

14144357_WZxg.png

最慢: Java gcj (native executable)

较慢: Java (openJDK); Java (Sun); Lua

稍慢: tcl; Javascript (spidermonkey)

较快: Python; Ruby; PHP; C++; Javascript V8; C; Perl5

最快的是Perl,最慢的gcj,你能接受吗?

内存使用情况

14143131_XRkd.png

内存对比图:

14150514_3YBp.png

测试源码:

C (source); Result: C gcc (Debian 4.4.4-1) 4.4.4

#include

#include

#include

#include

int main(){

setbuf(stdout,NULL); //disable output buffering

char *str=malloc(8);

strcpy(str,"abcdefgh");

str=realloc(str,strlen(str)+8);

strcat(str,"efghefgh"); //sprintf(str,"%s%s",str,"efghefgh");

int imax=1024/strlen(str)*1024*4;

printf("%s","exec.tm.sec\tstr.length\n"); //fflush(stdout);

time_t starttime=time(NULL);

char *gstr=malloc(0);

int i=0;

char *pos;

int lngth;

char *pos_c=gstr;

int str_len=strlen(str);

while(i++

lngth=strlen(str)*i;

gstr=realloc(gstr,lngth+str_len);

strcat(gstr,str); //sprintf(gstr,"%s%s",gstr,str);

pos_c+=str_len;

pos=gstr;

while(pos=strstr(pos,"efgh")){

memcpy(pos,"____",4);

}

if(lngth % (1024*256)==0){

printf("%dsec\t\t%dkb\n",time(NULL)-starttime,lngth/1024); //fflush(stdout);

}

}

//printf("%s\n",gstr);

}

C++ (source) Result: C++ g++ (Debian 4.4.3-7) 4.4.3

#include

#include

#include

using namespace std;

main ()

{

string str = "abcdefgh";

str += "efghefgh";

int imax = 1024 /str.length() * 1024 *4;

time_t currentTime = time(NULL);

cout <<"exec.tm.sec\tstr.length" <

string find&#61; "efgh";

string replace &#61;"____";

string gstr;

int i&#61;0;

int length;

// int end&#61;0; // size_t end&#61;0;

while(i&#43;&#43;

gstr &#43;&#61; str;

gstr &#61; gstr;

size_t start, sizeSearch&#61;find.size(), end&#61;0;

while((start&#61;gstr.find(find,end))!&#61;string::npos){

end&#61;start&#43;sizeSearch;

gstr.replace(start,sizeSearch,replace);

}

length &#61; str.length()*i;

if((length%(1024 * 256))&#61;&#61;0){

cout <

}

}

// cout <

return 0;

}

Javascript (source); Results: Javascript (Spidermonkey - Mozilla) 1.8.0 pre-release 1 2007-10-03,

Javascript (V8 - Chrome)

#!/usr/local/bin/js

var str &#61; "abcdefgh"&#43;"efghefgh";

var imax &#61; 1024 / str.length * 1024 * 4;

var time &#61; new Date();

print("exec.tm.sec\tstr.length");

var gstr &#61; "";

var i&#61;0;

var lngth;

while (i&#43;&#43;

gstr &#43;&#61; str;

gstr &#61; gstr.replace(/efgh/g, "____");

lngth&#61;str.length*i;

if ((lngth % (1024*256)) &#61;&#61; 0) {

var curdate&#61;new Date();

print(parseInt(((curdate.getTime()-time.getTime())/1000))&#43;"sec\t\t"&#43;lngth/1024&#43;"kb");

}

}

Java (source) Results: Java (OpenJDK) "1.6.0 18",

Java (Sun) "1.6.0 16",

Java (gcj) (Debian 4.4.3-1) 4.4.3

public class java_test {

public static final void main(String[] args) throws Exception {

String str &#61; "abcdefgh"&#43;"efghefgh";

int imax &#61; 1024 / str.length() * 1024 * 4;

long time &#61; System.currentTimeMillis();

System.out.println("exec.tm.sec\tstr.length\tallocated memory:free memory:memory used");

Runtime runtime &#61; Runtime.getRuntime();

System.out.println("0\t\t0\t\t"&#43;runtime.totalMemory()/1024 &#43;":"&#43; runtime.freeMemory()/1024&#43;":"&#43;(runtime.totalMemory()-runtime.freeMemory())/1024);

String gstr &#61; "";

int i&#61;0;

int lngth;

while (i&#43;&#43;

gstr &#43;&#61; str;

gstr &#61; gstr.replaceAll("efgh", "____");

lngth&#61;str.length()*i;

if ((lngth % (1024*256)) &#61;&#61; 0) {

System.out.println(((System.currentTimeMillis()-time)/1000)&#43;"sec\t\t"&#43;lngth/1024&#43;"kb\t\t"&#43;runtime.totalMemory()/1024&#43;":"&#43;runtime.freeMemory()/1024&#43;":"&#43;(runtime.totalMemory()-runtime.freeMemory())/1024);

}

}

}

}

Perl5 (source); Result: This is perl, v5.10.1

#!/usr/bin/perl

$|&#61;1; #disable output buffering, this is necessary for proper output through pipe

my $str&#61;&#39;abcdefgh&#39;.&#39;efghefgh&#39;;

my $imax&#61;1024/length($str)*1024*4; # 4mb

my $starttime&#61;time();

print "exec.tm.sec\tstr.length\n";

my $gstr&#61;&#39;&#39;;

my $i&#61;0;

while($i&#43;&#43; <$imax&#43;1000){ #adding 1000 iterations to delay exit. This will allow to capture memory usage on last step

$gstr.&#61;$str;

$gstr&#61;~s/efgh/____/g;

my $lngth&#61;length($str)*$i; ## my $lngth&#61;length($gstr); # Perhaps that would be a slower way

print time()-$starttime,"sec\t\t",$lngth/1024,"kb\n" unless $lngth % (1024*256); #print out every 256kb

}

PHP (source); Result: PHP 5.3.1-5 with Suhosin-Patch (cgi-fcgi)

$str&#61;"abcdefgh"."efghefgh";

$imax&#61;1024/strlen($str)*1024*4; # 4mb

$starttime&#61;time();

print("exec.tm.sec\tstr.length\n");

$gstr&#61;&#39;&#39;;

$i&#61;0;

while($i&#43;&#43; <$imax&#43;1000){

$gstr.&#61;$str;

$gstr&#61;preg_replace(&#39;/efgh/&#39;,&#39;____&#39;,$gstr);

$lngth&#61;strlen($str)*$i;

if($lngth % (1024*256)&#61;&#61;0){

print (time()-$starttime."sec\t\t".($lngth/1024)."kb\n");

}

}

?>

Python3 (source); Result: Python 3.1.3

#!/usr/bin/python3 -u

import re

import time

import sys

str&#61;&#39;abcdefgh&#39;&#43;&#39;efghefgh&#39;

imax&#61;1024/len(str)*1024*4 # 4mb

starttime&#61;time.time();

print "exec.tm.sec\tstr.length"

sys.stdout.flush()

gstr&#61;&#39;&#39;

i&#61;0

while (i

i&#61;i&#43;1

gstr&#43;&#61;str

gstr&#61;re.sub(&#39;efgh&#39;,&#39;____&#39;,gstr)

lngth&#61;len(str)*i

if(lngth % (1024*256) &#61;&#61; 0):

print int(time.time()-starttime),"sec\t\t",(lngth/1024),"kb"

sys.stdout.flush()

Ruby (source); Result: ruby 1.8.7

#!/usr/bin/ruby

$stdout.sync&#61;true;

str&#61;&#39;abcdefgh&#39;&#43;&#39;efghefgh&#39;;

imax&#61;1024/str.length*1024*4; # 4mb

starttime&#61;Time.new;

print("exec.tm.sec\tstr.length\n");

gstr&#61;&#39;&#39;;

i&#61;0;

while i

i&#61;i&#43;1;

gstr&#43;&#61;str;

gstr&#61;gstr.gsub(/efgh/, "____")

lngth&#61;str.length*i;

if(lngth % (1024*256)&#61;&#61;0)

print(((Time.new-starttime).ceil).to_s&#43;"sec\t\t",(lngth/1024).to_s,"kb\n");

end

end

#puts gstr;

Lua (source); Result: Lua 5.1.4

#!/usr/bin/lua

io.stdout:setvbuf "no"; -- io.flush();

str&#61;&#39;abcdefgh&#39;..&#39;efghefgh&#39;;

imax&#61;1024/string.len(str)*1024*4; -- 4mb

starttime&#61;os.time();

print "exec.tm.sec\tstr.length";

gstr&#61;&#39;&#39;;

i&#61;0;

while i

i&#61;i&#43;1;

gstr&#61;gstr..str;

gstr&#61;string.gsub(gstr,"efgh","____");

lngth&#61;string.len(str)*i;

if(math.mod(lngth,1024*256)&#61;&#61;0) then

print(os.time()-starttime.."sec\t\t"..(lngth/1024).."kb");

end

end

tcl (source); Result: tcl 8.4.19

#!/usr/bin/tclsh

set str "abcdefgh"

append str "efghefgh"

set imax [expr {1024/[string length $str]*1024*4}]

set starttime [clock clicks -milliseconds]

puts "exec.tm.sec\tstr.length";

set gstr ""

set i 0

while {$i<[expr {$imax&#43;1000}]} {

incr i

append gstr $str;

regsub -all {efgh} $gstr ____ gstr

set lngth [expr {[string length $str]*$i}]

if {[expr {$lngth % (1024*256)}] &#61;&#61; 0} {

puts "[expr int([expr [clock clicks -milliseconds] - $starttime] / 1000)]sec\t\t[expr {$lngth/1024}]kb"

}

}

exit

结论

各语言随着版本升级&#xff0c;也在不断优化&#xff0c;想要用好每个语言的特性&#xff0c;需要摸透她的脾气&#xff0c;这个需要不断的加深了解。

选语言就像选恋人&#xff0c;情人眼里出西施&#xff0c;你中意的&#xff0c;就是最好的&#xff0c;所以对以上结果别太较真。



推荐阅读
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 字节码开发笔记:深入解析与应用技巧 ... [详细]
  • 在 Windows 10 环境中,通过配置 Visual Studio Code (VSCode) 实现基于 Windows Subsystem for Linux (WSL) 的 C++ 开发,并启用智能代码提示功能。具体步骤包括安装 VSCode 及其相关插件,如 CCIntelliSense、TabNine 和 BracketPairColorizer,确保在 WSL 中顺利进行开发工作。此外,还详细介绍了如何在 Windows 10 中启用和配置 WSL,以实现无缝的跨平台开发体验。 ... [详细]
  • 深入解析 ELF 文件格式与静态链接技术
    本文详细探讨了ELF文件格式及其在静态链接过程中的应用。在C/C++代码转化为可执行文件的过程中,需经过预处理、编译、汇编和链接等关键步骤。最终生成的可执行文件不仅包含系统可识别的机器码,还遵循了严格的文件结构规范,以确保其在操作系统中的正确加载和执行。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 本文详细介绍了 Sublime Text 3 在 2021 年的激活密钥及其在线激活方法。用户可以通过提供的链接访问云海天教程,获取更多详细的激活码信息和操作步骤。此外,文章还提供了安全可靠的激活方案,帮助用户顺利激活软件,提升编程效率。 ... [详细]
  • 软件开发史上最具影响力的十位编程大师(附图解)
    在软件开发领域,有十位编程大师对行业发展产生了深远影响。本文基于国外知名社区的一项评选,通过图文并茂的形式,详细介绍了这十位杰出人物,包括游戏开发先驱John Carmack等,为读者呈现了他们卓越的技术贡献与创新精神。 ... [详细]
  • 深入解析 JavaScript 代码执行流程:理解执行上下文与变量提升机制
    本文深入探讨了JavaScript代码的执行流程,重点解析了执行上下文和变量提升机制。通过详细分析代码解析过程,帮助开发者更好地理解JavaScript中的作用域和执行环境,为编写高效、无误的代码提供理论支持。 ... [详细]
  • Sublime Text 3 注册密钥及激活方法详解
    本文详细介绍了Sublime Text 3的注册密钥获取与激活方法,旨在帮助用户合法且高效地使用这款强大的文本编辑器。文章不仅提供了最新的注册密钥信息,还涵盖了详细的激活步骤,确保用户能够顺利激活软件,享受其带来的便捷与高效。此外,文中还简要对比了Sublime Text 3与其他主流文本编辑器的功能差异,为用户提供更多选择参考。 ... [详细]
  • 综合实训 201521440015
    Chinesepeople’publicsecurityuniversity网络对抗技术实验报告实验五综合渗透学生姓名常泽远年级15区队4指导教师高见信息技术与网络安全学院2018 ... [详细]
author-avatar
VASTEw
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有