Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 NetBeans探查器显示了截然不同的执行时间_Java_Performance_Netbeans_Profiling_Profiler - Fatal编程技术网

Java NetBeans探查器显示了截然不同的执行时间

Java NetBeans探查器显示了截然不同的执行时间,java,performance,netbeans,profiling,profiler,Java,Performance,Netbeans,Profiling,Profiler,我正在对两种算法进行基准测试,以解决具有二维点的文件上的天际线查询问题 我宣布: SkylineAlgorithm bnl=new bnl(); SkylineAlgorithm sfs=新sfs() 然后手动测量其性能: long startTime = System.nanoTime(); List<Point> skylinesBnl = bnl.getSkylinePoints(file); long endTime = System.nanoTime(); long dur

我正在对两种算法进行基准测试,以解决具有二维点的文件上的天际线查询问题

我宣布:

SkylineAlgorithm bnl=new bnl();
SkylineAlgorithm sfs=新sfs()

然后手动测量其性能:

long startTime = System.nanoTime();
List<Point> skylinesBnl = bnl.getSkylinePoints(file);
long endTime = System.nanoTime();
long durationBnl = (endTime - startTime) / 1000000;

startTime = System.nanoTime();
List<Point> skylinesSfs = sfs.getSkylinePoints(file);
endTime = System.nanoTime();
long durationSfs = (endTime - startTime) / 1000000;

System.out.println("BNL: " + durationBnl + " ms");
System.out.println("SFS: " + durationSfs + " ms");
然后我考虑使用更复杂的工具,比如NetBeans分析器。我将根分析方法设置为
getSkylinePoints(文件)
(两种算法通过模板方法设计模式共享该方法),然后在行的末尾
列出skylinesBnl=bnl.getSkylinePoints(文件)我将探查器设置为保存结果并输出它们。sfs也是如此

我的结果如下(在“新建”选项卡中打开图像):

BNL:

SFS:


这与我通过手工方式得到的结果大不相同。有什么想法吗?

答案很简单:
getPointRDDFromTextFile
显然使用了磁盘I/O并产生了更复杂的结果。如果去掉I/O-op,将大大减少执行时间。根据设计,访问任何类型的驱动器总是非常慢

对于任何类型的套接字(除了内存管道中的套接字)也是如此,因此WAN/LAN数据传输以及任何类型的递归算法(因为堆栈乘法)


要获得类似的结果,您需要预取文件并从内存中读取。。。当然,如果它足够小。

那么从理论上讲,由于两种算法访问同一个文件,它们之间的差异应该是相同的,对吗?这意味着,因为在NetBeans中,我有一个~200ms的差异,所以我应该在手动方式中有相同的差异。以我的手动方式,虽然存在~300ms的差异,但这是否刚好在误差范围内(因为我不进行多次迭代并从中求平均值)?使用NetBeans探查器是否也可以对磁盘I/O进行计数?也许通过不将
java.io
包从过滤器中排除。。。不明白你在问什么。也许谷歌翻译可以帮你。你有什么不明白的,我可以更好地解释?英语是我的母语,我看不出我的语法哪里出了问题。
BNL: 4648 ms
SFS: 4946 ms