Perl与Java字符串查找时的性能实验及分析

来源 :硅谷 | 被引量 : 0次 | 上传用户:g471151931
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:Perl和Java在处理字符串方面的强大功能,使得程序员们常常不知道如何选择他们。首先对Perl语言和Java语言进行比较,然后进行字符处理效率实验,并对实验结果进行分析,最后得出科学的结论,从而为研究人员和开发人员基于性能选择使用Perl或者Java提供依据。
  关键词:Perl;Java;JVM
  中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2010)1210184-02
  
   0、引 言
  
   字符串的查找及处理是程序员们在工作中最常见的任务之一,我相信绝大多数的程序员在处理这种问题时,肯定首先想到的是Perl、Java、c及c++,这主要是因为他们都有处理字符串的强大功能,虽然c及c++在处理字符串时其运行速度远超Perl和Java,这是不容置疑的,那么Perl和Java该如何抉择呢?本文将在实验的基础上,处理字符串查找时的代码量和运行速度等方面对Perl和Java的字符串查找性能进行对比分析。
  
  1、Perl语言和Java语言概述
  
  1.1 PerI语言概述
  Perl是一种功能强大的脚本语言,最初设计用于系统管理任务,后来扩展给上万个用户提供上万种用途,主要用途包括Web页制作CGI脚本,操作系统管理任务自动化,生成报表以及跨平台的开发任务等,它可以轻易的实现扫描任意文本文件、从中提取有用的信息、然后按照要求的格式打印出报表。Perl语言被设计成是“实用的”,因此它是易于使用、高效、功能丰富的一种语言。Perl结合了c、sed、awk、sh等一些工具的许多优秀特性。
  Perl的重要特点:
  1)Perl的表达式语法和c的表达式语法非常相似。
  2)和大多数UNIX工具不同,Perl本身不会限制数据大小,只要有足够的内存。
  3)Perl可以一次读取整个文件的内容并且保存到一个普通的字符串变量中。
  4)递归嵌套层数没有限制。
  5)使用“哈希表(hash)”来表示表格。在必要的时候哈希表会自动增长额外的空间以免妨碍性能。
  6)使用“模式匹配”来快速扫描大量数据。
  7)Perl也可以和二进制数据打交道,通过某些技术,可以使一个DBM文件象一个哈希表一样操作。
  8)出于setuid方式运行的Perl脚本要比同样的c程序安全,Perl拥有一个贯穿数据流的污染检测系统,这可以防止大多数令人生厌的安全漏洞。
  9)Perl允许将现有的sed脚本或者awk脚本转换为Perl脚本。
  10)Perl是解释执行的脚本语言,是跨平台的,其解释器的本质和JVM相同。
  1.2 Java语言概述
  Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的、动态的语言。
  Java提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。C++安全性不好,但c和c++被大家接受,所以Java设计成c++形式,让大家很容易学习。Java去掉了c++语言中的指针运算、结构、typedefs、#define、需要释放内存等功能,减少了平常出错的50%,让Java的语言功能很精炼。而且,Java增加了一些很有用的功能,如自动收集碎片。Java实现了c++的基本面象对象技术并有一些增强,但同时为了语言简单,也删除了一些功能。Java处理数据方式和用对象接口处理对象数据方式一样。
  1.3 Perl语言和Java语言的共同点
  ①Perl和Java都是免费的、开放源码的语言。
  ②Perl和Java都是跨平台的,都能在绝大多数操作系统中运行,可以很容易地在不同系统间实现软件移置。
  ⑧Perl和Java都能实现脚本级的应用。
  ④Perl和Java都有强大的字符串处理功能。
  1.4 Perl语言和Java语言的不同点
  ①Perl只是一个脚本级的应用语言,在处理面向对象的编程时,Perl需要程序
  员自己来实现面向对象;而Java除了脚本级的应用外,更多的是用于面向对象的编程。
  ②在正则表达式上的应用、语法及程序结构等方面,Perl比Java简单和方便很多。
  ③虽然Perl的多线程和unicode字符支持都有了长足的进步,但在功能上还不如Java完善。
  
  2、对Perl语言和Java语言字符串查找进行的研究的必要性
  
  Perl语言和Java语言都有强大的字符串处理功能,而字符串处理是程序中最常见的任务之一,哪一种语言的运行速度更快、性能更优、效率更高、代码量更小呢?这些问题的解决将对程序员的选择有重要的意义,为此,我们有必要对这两种语言的字符串处理功能进行实验和研究,以便得出科学的结论,从而为研发人员提供重要的依据。
  
  3、Perl语言和Java语言字符串查找的性能对比实验过程及结果
  
  本文对Perl语言和Java语言字符串查找的性能研究,是通过性能对比实验来完成的,实验的设计和实现过程如下:
  1)实验目的。从处理字符串查找时的代码量和运行速度等方面,对Perl和Java的字符串查找性能进行对比分析。
  2)实验过程概述。本实验的核心思想是:在同一台计算机的同一操作系统平台上,搭建Perl语言和Java语言的运行环境,同时关闭实验机的防火墙和杀毒软件等一切外部程序,然后分别Perl语言和Java语言的字符串查找程序中同一文本文件中找出指定的字符串的个数,分别记录它们各自所需要的时间,最后分析实验使用的Perl语言和Java语言的字符串查找程序的主要指标,主要包括:规范格式的程序行数、程序的单词数、需要手工击打键盘的次数即字符总数、完成所有的查找需要的平均时间,并最终得出实验结论。
  3)实验使用的硬件环境和软件环境。硬件环境为:双核1.736的CPU、内存1G、集成显卡、80G硬盘的个人计算机。
  软件环境为:在符合上述硬件条件的同一台计算机上安装WINDOWSXP操作系统、并关闭防火墙和杀毒软件等一切外部程序。
  4)实验使用的字符串文本数据。准备大小为4G的文本文件,内容为字符串,需要特别注意的是,这个文本文件中的字符串必须含有多个中文、英文、数字字符、Unicode字符等多种数据类型的字符数据,我们的目标是从中统计出指定字符串的数量,并记录该过程所需要的时间。
  5)分别写出Perl语言和Java语言的字符串查找程序及其运行环境,同时Perl语言和Java语言的程序都要具备自动记录程序开始运行到运行结束所需时间的功能,这样就可以减少由于人工记录时间导致的实验误差,然后分别对程序进行性能优化并通过测试,这里有一点,需要特别注意,由于实验需要通过查找统计出同一文本文件中指定字符串的数量及查找时间,所以在指定查找的字符串时,需要使用在文本文件中出现的频率较高,而且是在文本文件的最后几行中出现过的字符串,这样统计字符串查找时间时的误差会 小一些。
  6)实验过程概述。首先,为了避免计算机的硬件环境、操作系统平台、网络状况和应用程序环境等外部条件对实验结果的影响,我们在符合上述硬件条件的同一台计算机的同一操作系统平台上,搭建Perl语言和Java语言的运行环境,然后关闭实验机的防火墙和杀毒软件等一切外部程序。
  其次,将准备好的文本文件复制到Perl语言和Java语言程序指定的文件路径。
  第三、为了避免文本文件中数据类型和数据的存放顺序对实验结果的影响,我们分别用中文、英文、数字字符、Unicode字符等多种数据类型的字符数据进行实验。
  第四、按照实验条件开始实验,分别运行GridView控件和Repeater控件的相关程序,并分别记录它们显示每个表的时间。
  第五、按照实验条件开始实验,分别运行事先准备好的Perl语言和Java语言的字符串查找程序,并分别记录它们统计出文本文件中指定字符串个数的时间。
  第六、将需要查找的字符串分别更改为中文、英文、数字字符、Unicode字符等多种数据类型的字符数据,并依次重复第五步。
  第七、结果实验操作,进行实验数据分析,并得出实验结论。
  在上面的机器中,分别用Perl程序和Java程序从4G的文本文件中统计出指定字符串的数量,其中Perl程序和Java程序的相关数据如下表:
  7)实验结论及误差分析。在上面的实验数据中,通过需要手工击打键盘的次数即字符总数体现的是代码量,可以看到,Java程序的代码量是Perl程序的885/189=4.68倍,另外,完成所有的查找需要的平均时间体现的是程序的运行速度,在上面的实验数据可以发现,Perl程序的运行速度比Java程序的运行速度略快,但是相差不大,Perl程序只比Java程序快4.5秒,占总运行时间的0.625%。
  实验结论:在进行字符串查找及数量统计时,Java程序的代码量是Perl程序的4倍多,而在运行速度上,也是Java程序比Perl程序略慢,所以Perl程序更优。
  误差分析:首先,在本次实验中,我们只是想要测试同等条件下同样功能的Perl程序和Java程序的代码量和运行速度,所以我们并没有考虑硬盘转速、CPU的Cache及显示卡等环境因素的影响,这些因素会对实验结果产生一定的误差,但是不影响实验结论。其次,我们采用的是单核的程序,所以双核的优势不能发挥,这种因素会影响完成查找需要的平均时间,因而导致实验结果有一定的误差,但是也不会影响实验结论。最后,由于实验所采用的实验机是智能风扇,所以程序运行时风扇随机运行也会产生一定的误差,从而对实验结果也有一定的影响,但是由于实验数据本身很大,程序运行需要的时间较长,Perl程序和Java程序分别运行时风扇的启用次数是一样的,所以对实验结果影响不大。
  8)对实验结论的理论分析。由于Perl和Java跨平台的原理都是解释执行的,所以他们在上述实验中运行时间的区别主要是程序运行时的代码量有差异,造成程序的机器码的运行数量不同,进而造成运行时间上的不同。
  综上所述,Perl和Java在处理字符串方面都有强大的功能,但是在查找字符串时,应该优先选择Perl语言,而不是Java语言,因为Perl程序的代码量和运行速度,都强过Java程序,特别是代码量上,Perl程序的优势极其明显。
  
  参考文献:
  [1]《Perl教程(win32版)》,Randal L Schwartz,Erik 01son,TomChristlansen
  [2]《高级Perl编程》,Sriram srinivasan
其他文献
在企业运营中,压力容器与压力管道的安全问题至关重要,一旦压力容器与压力管道出现裂纹,并且没有被及时发现,会对企业与相关工作人员带来极其严重的损害,因此,应对压力容器与
最近,国家劳动和社会保障部提出把“创业培训”作为职业培训的重要内容之一,并选择上海、北京、苏州作为1998年试点城市。创业培训的指导思想是紧密结合各地经济发展的需要,
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2010)1210170-01    随着改革开放的不断深入经济的持续增长和城市化进程的不断加快,国土规划部门的工作量也随之增大,工作日益繁重,相关的管理方式和软件系统已难以适应办公需要,另一方面,政府对城市规划和机关办公自动化越来越重视,要求也越来越高,公众对规划的参与意识越来越强,因此机关要实现内部网上办公,并通过统一的外部网络
当今,最先进的芯片上集成晶体管的数目已接近1012数量级,这就说明IT的原动力半导体技术,也可以说就是MOS技术的重要性。  近年来,随着材料科学的进步,理论和实验两方面对半导体材料中输运现象的研究成果已有一定积累,有关半导体异质结构中电子态、极化子的结合能、振动频率等物理量随压力的变化等研究也在不断深入,HOltz,Ban等人都对这一问题进行过讨论,但对MOsFET异质结中电子迁移率的压力效应的
随着现代信息技术的飞速发展,交互式电子白板和“按按按”互动反馈技术在教室中越来越受欢迎。交互式白板集黑板、计算机、投影仪等多种功能于一身,它的优势在于:全新的可视
模型检验产生于20世纪80年代初,由美国的clarke和Emerson提出的。主要思想是:将要验证的系统抽象为有限状态机,用时态逻辑描述系统应该满足的性质,然后遍历有限状态机的状态空间,对每个状态判断是否满足这些性质,若不满足,将给出一个不满足性质的状态序列,其优点是:全自动进行无须人机交互。近年来,把模型检测应用于软件架构,已成为一个重要方向。因为对于一般的软件系统的状态图中状态是可枚举的,所以
摘要:艺术类学生由于专业学习的方式方法区别于文科及理工科的学生,因此该类学生的思想状况、行为方式及对各类社会现象的看法具有一定的特殊性。研究艺术类学生的特点,是对该类学生因材施教和进行分层分类教育的依据。本文在问卷调研的基础上对艺术类学生的价值观、人生目标、行为方式和爱好进行解读分析,并提出在艺术类学生群体中有效开展团建工作的思考。  关键词:艺术类学生 行为方式 思想引领  一、问卷内容及样本情
一条新闻从记者采集到公开面世这个过程中,编辑是最后一个也是重要的决定性环节。编辑对稿件的价值判断、逻辑把握、技术性差错负最后责任。 A news gathering from report
伴随着我国社会经济高速发展,化工行业获得了更为广泛的进步,其中机械密封作为化工生产重要轴封装置,其作用是极为重要的.但因其自身需要加强的专业性,对零件、参数与配置等
摘要:针对当前大学生普遍存在的创新素质不高的现状,从创新的基本素质角度分析大学生创新素质方面存在的主要问题,提出了提升大学生创新素质的紧迫性和必要性,最后给出提升大学生创新素质的几点意见。  关键词:大学生;素质;创新素质  中图分类号:G64 文献标识码:A 文章编号:1671-7597(2010)1210188-01    加强大学生创新素质的培养,是高等教育适应时代要求的必然要求,也是素质教