首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HPROF结果解释

HPROF结果解释
EN

Stack Overflow用户
提问于 2013-11-09 19:54:05
回答 1查看 385关注 0票数 0

我有两组HProf转储,一组用于大样本,另一组用于较小的样本--这两组都来自于我所拥有的巨大数据的一个非常小的样本。我在努力找出我的方法中的瓶颈。

以下是我的大样本(http://pastebin.com/PEH8yR3v)和小样本(http://pastebin.com/aR8ywkDH)的堆分配数据。

我注意到,char[]占用了我的memory.Also的大部分时间-- char[]占用的内存百分比从小到大不等。我不知道当我分析我的整个样本时会有什么变化。

但是,我关心的重要问题是,当我试图运行一个大小为3GB的输入数据时,这个程序(读取、解析/处理、写入)会写回10 3GB的数据。除了大小不超过1GB的列表外,我不会在内存中存储任何内容--这是简单的读取、处理、写入管道。因此,我的程序在运行时仍然占用大约7GB的主内存。

这是我的方法

代码语言:javascript
复制
read a file in from a string Iterator
for each line in ip_file perform 
  op_buffer = myFunction(line)
write op_buffer to op_file.
Perform this for all 20K files in my input data. 

def myFunction(line)
{
 var :String = null;
 for each word in line  
  {
   var class_obj = new Classname(word)
   op_line + = class_obj.result
  }
return op_line
}

由于在myFunction中创建的对象将在myFunction的末尾显示出来,所以我不小心删除/释放它们。你们感觉到瓶颈了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-09 20:07:01

因为,在myFunction中创建的对象将在myFunction的末尾显示出来。

不,他们不会的。这不是C++。所有对象都是在堆上创建的,并且一直存在直到垃圾回收。

而且,您还没有在伪代码中声明op_line,所以我假设它是在方法调用之间保留的,我猜这是内存泄漏。我的意思是,不可能有一个由>1亿字节组成的字符数组,这正是“小”堆转储所表示的。

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

https://stackoverflow.com/questions/19882336

复制
相关文章

相似问题

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