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