论文部分内容阅读
摘要: 虚拟机技术、垃圾回收机制简化了Java软件的设计与开发,提高软件生产的效率和质量。针对智能设备软、硬件资源受限的特点,结合JPDA平台提供的完善功能,利用TPTP测试工具,对Java示例软件进行性能测试,在对测试结果进行分析和对比后,得出资源受限Java程序设计的两个原则。
关键词: 性能测试;JPDA;TPTP;Java
中图分类号:TP302.7 文献标识码:A 文章编号:1671-7597(2011)0210066-02
0 引言
随着计算机和网络技术的发展,Java语言迅速成为一种重要的程序设计语言。以Java语言为代表的Java技术在信息领域中占据了重要的地位,从笔记本电脑到数据中心,从手持设备到高性能的科学计算机,从单机到网络,Java技术几乎无处不在。Java技术的显著特点就是引入了虚拟机技术。程序代码运行于Java虚拟机之上,由虚拟机解释执行,不和主机环境中的操作系统直接耦合。在虚拟机中实现的垃圾回收机制可以动态的回收程序占用的内存资源,消除了传统程序设计语言中的内存泄露问题,有效的提高了程序的稳定性,降低了程序对内存资源的消耗。同时,由于程序代码要经过虚拟机的解释执行,与直接交由操作系统执行相比,代码的执行效率有所降低,可能会降低软件的质量。软件测试是保证软件质量的有效方式,依据测试的不同目标,可以将软件测试分为功能测试和性能测试两方面。黑盒测试、白盒测试通常指功能测试,即测试软件对给定的一系列输入是否能得到稳定、正确的输出结果。而性能测试主要针对软件运行时所消耗的内存、时间等指标进行测试。功能上正确的软件,如果性能不能满足目标系统的要求同样不是合格的软件产品。
1 JPDA体系分析
Java平台调试体系(JPDA,Java Platform Debugger Architecture)
是Java平台的基础组成部分,由Java虚拟机工具接口(JVMTI,Java VM Tool Interface)、Java调试连线协议(JDWP,Java Debug Wire Protocol)和Java调试接口(JDI,Java Debug Interface)三层组成,其体系结构如图1所示。
调试人员可以利用三层中的任意一层实现对Java软件的性能测试。由于层次越靠近前端就越靠近用户,后端层次中许多琐碎的细节就会被屏蔽的越多,因此,前端层次使用更简单,接口也更稳定,Java规范推荐的原则是尽量使用前端的层次,即JDI层[1]。对于软件测试人员,JPDA简化了Java程序测试,实现了程序功能代码和程序测试代码的分离。如果没有JPDA,程序性能测试代码的一般结构如图2所示。
程序代码中需要额外加入开始和结束测试标记。如果测试程序运行时间,开始标记可以是程序运行前的时间,结束标记是程序结束时间,两者之差为程序运行时间。同样,如果测试程序的内存消耗,标记可以是程序运行前后的内存总量标记。两个标记的引入,向被测试代码中引入了额外的代码,即污染了被测试代码,导致程序结构混乱。同时,由于打标记也会消耗内存和CPU资源,会引入额外的误差,导致性能测试不准确。Java平台中JPDA的引入,解决了这个问题。利用JPDA进行测试,不需要在被测试程序中加入标记代码,提高了测试质量,消除了对被测试代码的污染,实现了软件功能代码和测试代码的分离。
2 性能测试及分析
2.1 TPTP测试平台
JPDA中功能代码和测试代码的分离导致了独立测试软件平台的出现。以JPDA为基础,软件测试领域出现了很多完善的测试工具,Eclipse测试和性能工具平台(TPTP,The Eclipse Test and Performance Tools Platform)是其中广泛使用的一个平台。在进行性能测试时,TPTP依赖JPDA平台,提供完善的性能测试功能。在软件代码实现时,TPTP以免费、开源的Eclipse框架为基础,具有免费、开源的特点,软件体系标准开放,可以方便灵活的与其他软件工具相互融合。TPTP使用方法简单,只需设定测试项目(时间测试、内存测试等)后,就可以自动开始对Java软件的性能测试。[2]
2.2 测试示例
随着军事装备智能化程度越来越高,越来越多的智能设备被集成到武器系统中。Java语言是实现智能设备的重要程序设计语言。针对智能装备资源有限、对程序运行效率要求高的特点,可以借助TPTP对Java软件进行性能测试。垃圾的回收机制和程序运行效率是Java语言的两个重要特点,测试示例以这两点为重点进行测试。
测试示例由两段完成相同功能的代码组成。代码采用不同的实现策略,通过测试,在对测试结果进行对比和分析的基础上,得出利用Java进行程序设计时的一些有益结论。两段代码的基本功能是创建Java对象,利用对象完成象征性的输入、输出操作。清单1对比了两段示例代码的基本结构。
两段代码的关键区别在于代码段A中的第1行代码是设计在for循环之内,还是循环之外,即Java对象obj是一次性在循环外创建,还是每次循环都重新创建。由于Java垃圾回收机制的存在,程序中无论创建多少个对象都会在程序退出后,由Java虚拟机将相应对象占用的内存资源回收,所以,两段代码都不会造成内存的浪费。从完成输入、输出操作的角度分析,两段代码也可以完成等价的工作,在功能上是等价的。
利用TPTP测试平台,分别对两段代码进行测试,测试时为了减少测试的誤差,将代码中的循环次数N分别取值1000、5000、10000、15000进行测试。两段程序运行所需时间和内存的测试结果如表1所示。因为测试结果的具体数值会和计算机内存容量、CPU利用率、CPU主频等指标相关,所以,具体值意义不重要,而值之间的对比关系是相对稳定的,更能说明代码的性能。
在图3中,程序运行的某个时刻,在循环外创建Java对象的程序设计策略对内存资源的消耗是随着循环次数的递增而近似线性增加,与在循环内部创建对象相比,消耗了更多的内存资源。
在图4中,同样执行一次输入、输出操作,在循环内创建对象的程序设计策略需要更多的时间,即程序运行速度更慢。
综合分析测试结果,针对智能设备内存、CPU资源有限的特点,可以得到以下Java程序设计原则:
1)虽然Java具备垃圾回收机制,可以实现动态的内存资源回收,但在创建对象、申请内存时,也应该尽量合并相同的请求。否则,仍然会使程序运行中出现较高的内存使用峰值,影响系统性能的发挥;
2)反复创建相同的对象虽然可以使逻辑更加简洁,功能划分更加清晰,但是相同对象的复用要更节省资源,并可以获得更高的执行效率。
3 总结
具备了很多先进特性的Java技术在智能计算领域得到了广泛的应用。虚拟机技术、垃圾回收机制简化了程序的设计与开发,提高了软件生产的效率。但是,在资源相对受限的智能设备领域,利用Java进行开发时,节约资源、提高程序效率仍旧是一个很重要的原则。在进行这类软件开发时,可以借鉴本文根据测试所得到的两条原则。对软件的性能的持续测试是保证软件质量、提高软件性能的有效方法。JPDA体系的引入为Java软件的性能测试提供了基础性的保障。
参考文献:
[1]Oracle,Java Platform Debugger Architecture Structure Overview,[EB/OL],[2010-08-10],http://download-llnw.oracle.com/javase
/6/docs/technotes/guides/jpda/architecture.html.
[2]Valentina Popescu,Java Application Profiling using TPTP,[EB/OL],2006-02-21[2010-08-10].http://www.eclipse.org/articles/Article
-TPTP-Profiling-Tool/TptpProfilingArticle.html.
作者简介:
荆涛(1977-),男,汉族,河北人,硕士,讲师,中国人民解放军装甲兵工程学院信息工程系,研究方向为计算机应用;王子强(1976-),男,汉族,河北人,硕士,讲师,中国人民解放军装甲兵工程学院信息工程系,研究方向为计算机应用;李媛州(1977-),女,汉族,河北人,中国人民解放军装甲兵工程学院信息工程系,研究方向为导航制导与控制。
关键词: 性能测试;JPDA;TPTP;Java
中图分类号:TP302.7 文献标识码:A 文章编号:1671-7597(2011)0210066-02
0 引言
随着计算机和网络技术的发展,Java语言迅速成为一种重要的程序设计语言。以Java语言为代表的Java技术在信息领域中占据了重要的地位,从笔记本电脑到数据中心,从手持设备到高性能的科学计算机,从单机到网络,Java技术几乎无处不在。Java技术的显著特点就是引入了虚拟机技术。程序代码运行于Java虚拟机之上,由虚拟机解释执行,不和主机环境中的操作系统直接耦合。在虚拟机中实现的垃圾回收机制可以动态的回收程序占用的内存资源,消除了传统程序设计语言中的内存泄露问题,有效的提高了程序的稳定性,降低了程序对内存资源的消耗。同时,由于程序代码要经过虚拟机的解释执行,与直接交由操作系统执行相比,代码的执行效率有所降低,可能会降低软件的质量。软件测试是保证软件质量的有效方式,依据测试的不同目标,可以将软件测试分为功能测试和性能测试两方面。黑盒测试、白盒测试通常指功能测试,即测试软件对给定的一系列输入是否能得到稳定、正确的输出结果。而性能测试主要针对软件运行时所消耗的内存、时间等指标进行测试。功能上正确的软件,如果性能不能满足目标系统的要求同样不是合格的软件产品。
1 JPDA体系分析
Java平台调试体系(JPDA,Java Platform Debugger Architecture)
是Java平台的基础组成部分,由Java虚拟机工具接口(JVMTI,Java VM Tool Interface)、Java调试连线协议(JDWP,Java Debug Wire Protocol)和Java调试接口(JDI,Java Debug Interface)三层组成,其体系结构如图1所示。
调试人员可以利用三层中的任意一层实现对Java软件的性能测试。由于层次越靠近前端就越靠近用户,后端层次中许多琐碎的细节就会被屏蔽的越多,因此,前端层次使用更简单,接口也更稳定,Java规范推荐的原则是尽量使用前端的层次,即JDI层[1]。对于软件测试人员,JPDA简化了Java程序测试,实现了程序功能代码和程序测试代码的分离。如果没有JPDA,程序性能测试代码的一般结构如图2所示。
程序代码中需要额外加入开始和结束测试标记。如果测试程序运行时间,开始标记可以是程序运行前的时间,结束标记是程序结束时间,两者之差为程序运行时间。同样,如果测试程序的内存消耗,标记可以是程序运行前后的内存总量标记。两个标记的引入,向被测试代码中引入了额外的代码,即污染了被测试代码,导致程序结构混乱。同时,由于打标记也会消耗内存和CPU资源,会引入额外的误差,导致性能测试不准确。Java平台中JPDA的引入,解决了这个问题。利用JPDA进行测试,不需要在被测试程序中加入标记代码,提高了测试质量,消除了对被测试代码的污染,实现了软件功能代码和测试代码的分离。
2 性能测试及分析
2.1 TPTP测试平台
JPDA中功能代码和测试代码的分离导致了独立测试软件平台的出现。以JPDA为基础,软件测试领域出现了很多完善的测试工具,Eclipse测试和性能工具平台(TPTP,The Eclipse Test and Performance Tools Platform)是其中广泛使用的一个平台。在进行性能测试时,TPTP依赖JPDA平台,提供完善的性能测试功能。在软件代码实现时,TPTP以免费、开源的Eclipse框架为基础,具有免费、开源的特点,软件体系标准开放,可以方便灵活的与其他软件工具相互融合。TPTP使用方法简单,只需设定测试项目(时间测试、内存测试等)后,就可以自动开始对Java软件的性能测试。[2]
2.2 测试示例
随着军事装备智能化程度越来越高,越来越多的智能设备被集成到武器系统中。Java语言是实现智能设备的重要程序设计语言。针对智能装备资源有限、对程序运行效率要求高的特点,可以借助TPTP对Java软件进行性能测试。垃圾的回收机制和程序运行效率是Java语言的两个重要特点,测试示例以这两点为重点进行测试。
测试示例由两段完成相同功能的代码组成。代码采用不同的实现策略,通过测试,在对测试结果进行对比和分析的基础上,得出利用Java进行程序设计时的一些有益结论。两段代码的基本功能是创建Java对象,利用对象完成象征性的输入、输出操作。清单1对比了两段示例代码的基本结构。
两段代码的关键区别在于代码段A中的第1行代码是设计在for循环之内,还是循环之外,即Java对象obj是一次性在循环外创建,还是每次循环都重新创建。由于Java垃圾回收机制的存在,程序中无论创建多少个对象都会在程序退出后,由Java虚拟机将相应对象占用的内存资源回收,所以,两段代码都不会造成内存的浪费。从完成输入、输出操作的角度分析,两段代码也可以完成等价的工作,在功能上是等价的。
利用TPTP测试平台,分别对两段代码进行测试,测试时为了减少测试的誤差,将代码中的循环次数N分别取值1000、5000、10000、15000进行测试。两段程序运行所需时间和内存的测试结果如表1所示。因为测试结果的具体数值会和计算机内存容量、CPU利用率、CPU主频等指标相关,所以,具体值意义不重要,而值之间的对比关系是相对稳定的,更能说明代码的性能。
在图3中,程序运行的某个时刻,在循环外创建Java对象的程序设计策略对内存资源的消耗是随着循环次数的递增而近似线性增加,与在循环内部创建对象相比,消耗了更多的内存资源。
在图4中,同样执行一次输入、输出操作,在循环内创建对象的程序设计策略需要更多的时间,即程序运行速度更慢。
综合分析测试结果,针对智能设备内存、CPU资源有限的特点,可以得到以下Java程序设计原则:
1)虽然Java具备垃圾回收机制,可以实现动态的内存资源回收,但在创建对象、申请内存时,也应该尽量合并相同的请求。否则,仍然会使程序运行中出现较高的内存使用峰值,影响系统性能的发挥;
2)反复创建相同的对象虽然可以使逻辑更加简洁,功能划分更加清晰,但是相同对象的复用要更节省资源,并可以获得更高的执行效率。
3 总结
具备了很多先进特性的Java技术在智能计算领域得到了广泛的应用。虚拟机技术、垃圾回收机制简化了程序的设计与开发,提高了软件生产的效率。但是,在资源相对受限的智能设备领域,利用Java进行开发时,节约资源、提高程序效率仍旧是一个很重要的原则。在进行这类软件开发时,可以借鉴本文根据测试所得到的两条原则。对软件的性能的持续测试是保证软件质量、提高软件性能的有效方法。JPDA体系的引入为Java软件的性能测试提供了基础性的保障。
参考文献:
[1]Oracle,Java Platform Debugger Architecture Structure Overview,[EB/OL],[2010-08-10],http://download-llnw.oracle.com/javase
/6/docs/technotes/guides/jpda/architecture.html.
[2]Valentina Popescu,Java Application Profiling using TPTP,[EB/OL],2006-02-21[2010-08-10].http://www.eclipse.org/articles/Article
-TPTP-Profiling-Tool/TptpProfilingArticle.html.
作者简介:
荆涛(1977-),男,汉族,河北人,硕士,讲师,中国人民解放军装甲兵工程学院信息工程系,研究方向为计算机应用;王子强(1976-),男,汉族,河北人,硕士,讲师,中国人民解放军装甲兵工程学院信息工程系,研究方向为计算机应用;李媛州(1977-),女,汉族,河北人,中国人民解放军装甲兵工程学院信息工程系,研究方向为导航制导与控制。