首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用hprof分析scala for循环

使用hprof分析scala for循环
EN

Stack Overflow用户
提问于 2011-10-17 05:55:00
回答 2查看 478关注 0票数 6

有传言说,scala中的for循环比while循环慢。

慢速:

代码语言:javascript
复制
for (i <- 0 until 10000) {
  f(i)
}

快速:

代码语言:javascript
复制
var i = 0
while (i < 10000) {
   f(i)
   i += 1
} 

如何使用hprof来判断for循环是否是代码中的瓶颈?我正在使用-agentlib:hprof=cpu=samples分析我的代码,那么在"CPU示例“部分中会有什么方法呢?

我想知道我的优化工作应该集中在哪里。for循环是瓶颈吗?

EN

回答 2

Stack Overflow用户

发布于 2011-10-17 08:02:36

我认为您可能会更幸运地使用yourkitvisualvm等专门用于分析的工具。

它们通常具有捕获CPU样本的接口,然后深入查看哪些调用占用了最多的CPU周期。

任何类型的瓶颈都会出现(比如占用95%的CPU时间),然后您可以深入查看您(或库)的哪些方法在这些热点的调用堆栈上。然后,您可以查看是否涉及for循环。

票数 3
EN

Stack Overflow用户

发布于 2011-10-17 10:07:12

将每个循环放在它自己的方法中,然后比较这些方法所花费的时间。并且使用足够的迭代来实际花费一些时间(或者将它们包装在另一个循环中)。10000次迭代应该需要微秒时间;这对于分析器来说很难测量。尝试十亿次(或10k次迭代的100k次迭代)。

而且,如果f(i)很昂贵,这将比循环花费的时间要长得多。此外,如果f(i)实际上什么也不做,它可能会被完全优化。所以要确保它这样做(例如,在某个地方更新一个计数器,计算一个和,或者其他什么)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7787605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档