Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行无偏差的程序/脚本性能比较 < >我想对基本上相同的算法的多个实现进行比较,这些算法是用爪哇、C++和Python编写的,后者使用PYPY、Jython和Cpython在MacOS X 7.4.4MacBook Pro上用普通(非SSD)HDD执行。_Java_C++_Python_Jython_Performance - Fatal编程技术网

Java 执行无偏差的程序/脚本性能比较 < >我想对基本上相同的算法的多个实现进行比较,这些算法是用爪哇、C++和Python编写的,后者使用PYPY、Jython和Cpython在MacOS X 7.4.4MacBook Pro上用普通(非SSD)HDD执行。

Java 执行无偏差的程序/脚本性能比较 < >我想对基本上相同的算法的多个实现进行比较,这些算法是用爪哇、C++和Python编写的,后者使用PYPY、Jython和Cpython在MacOS X 7.4.4MacBook Pro上用普通(非SSD)HDD执行。,java,c++,python,jython,performance,Java,C++,Python,Jython,Performance,这是一种“解码文件中的数据流”类型的算法,其中相关测量值为总执行时间,我希望通过操作系统、硬盘缓存、其他同时运行的程序来防止偏差,太大/太小的示例文件等。要创建一个公平的比较,我需要注意什么?为了防止偏差,我建议首先停止所有不必要的进程在后台运行 我对windows不太清楚,但在linux下,您可以通过拖放缓存清除HDD缓存 关于如何使用它的信息 此外,您可能希望对应用程序的多次运行进行平均,这样任何HDD或OS干扰都不会影响结果。这些都很难做好 在许多情况下,操作系统会缓存文件,以便在第二次执

这是一种“解码文件中的数据流”类型的算法,其中相关测量值为总执行时间,我希望通过操作系统、硬盘缓存、其他同时运行的程序来防止偏差,太大/太小的示例文件等。要创建一个公平的比较,我需要注意什么?

为了防止偏差,我建议首先停止所有不必要的进程在后台运行

我对windows不太清楚,但在linux下,您可以通过拖放缓存清除HDD缓存 关于如何使用它的信息


此外,您可能希望对应用程序的多次运行进行平均,这样任何HDD或OS干扰都不会影响结果。

这些都很难做好

在许多情况下,操作系统会缓存文件,以便在第二次执行文件时,它们的性能会突然好得多


另一个问题是比较解释语言和编译语言。被解释的语言需要将解释器加载到内存中的某个位置,否则它们无法运行。为了做到公平公正,你确实应该考虑译员的内存使用和加载时间是否应该是测试的一部分。如果您在一个可以假定解释器总是预加载的环境中寻找性能,那么您可以忽略这一点。web服务器的许多设置将能够保持预先加载的解释器。如果您在桌面上执行临时客户端应用程序,则在加载解释器时启动速度可能非常慢。

我建议您只需将每个程序运行多次(如20次左右),并对每个程序集进行最低测量。这将使它很有可能,程序将使用高清缓存和其他类似的东西。如果他们都这样做了,那么就没有偏见。

要完全不带偏见是不可能的,你可以做各种事情,比如运行最小进程等等,但我认为最好的方法是在不同的日子里以随机顺序长时间运行脚本,并获得尽可能接近无偏见的平均值


因为最终代码将以随机顺序在这样的环境中运行,您对平均行为而不是一些数字感兴趣。

void只是不带偏见,我们其余的人都倾向于阅读“统计上严格的Java性能评估”,并使用提供的JavaStats Python脚本。程序相当短(最低的度量值不可能是一个异常值吗?我目前正在运行最快的程序,直到性能触底,以确保所有内容都尽可能多地缓存,然后运行每个实现5次并取中间值。当然可能是一个异常值,但我认为不太可能。如果你觉得是这样,那么你可以使用群集算法来确定事物倾向于“群集到”哪个时间。您的方法似乎是最实用的,并且结果看起来很好。一旦HDD/文件缓存被排除在外,就非常接近。谢谢!请参见图1以了解为什么这不是一个好主意--“统计上严格的Java性能评估”我使用的是Mac OS X 10.6.4(我确实意识到这可能不是最好的测试平台,但这是我目前所拥有的全部),以防我的数字(见我对Evan答案的命令)非常接近(1%)我认为测试没有意义,除非你有非常特别的、简约的硬件,现代操作系统和计算机,我认为足够复杂,可以击败你的目的,我的意思是,同一个实现的多个执行非常接近。C++是Python的倍快。关于随机性等。