论文部分内容阅读
摘要: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
关键词: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