有传言说,scala中的for循环比while循环慢。
慢速:
for (i <- 0 until 10000) {
f(i)
}快速:
var i = 0
while (i < 10000) {
f(i)
i += 1
} 如何使用hprof来判断for循环是否是代码中的瓶颈?我正在使用-agentlib:hprof=cpu=samples分析我的代码,那么在"CPU示例“部分中会有什么方法呢?
我想知道我的优化工作应该集中在哪里。for循环是瓶颈吗?
发布于 2011-10-17 08:02:36
我认为您可能会更幸运地使用yourkit或visualvm等专门用于分析的工具。
它们通常具有捕获CPU样本的接口,然后深入查看哪些调用占用了最多的CPU周期。
任何类型的瓶颈都会出现(比如占用95%的CPU时间),然后您可以深入查看您(或库)的哪些方法在这些热点的调用堆栈上。然后,您可以查看是否涉及for循环。
发布于 2011-10-17 10:07:12
将每个循环放在它自己的方法中,然后比较这些方法所花费的时间。并且使用足够的迭代来实际花费一些时间(或者将它们包装在另一个循环中)。10000次迭代应该需要微秒时间;这对于分析器来说很难测量。尝试十亿次(或10k次迭代的100k次迭代)。
而且,如果f(i)很昂贵,这将比循环花费的时间要长得多。此外,如果f(i)实际上什么也不做,它可能会被完全优化。所以要确保它这样做(例如,在某个地方更新一个计数器,计算一个和,或者其他什么)。
https://stackoverflow.com/questions/7787605
复制相似问题