gpt4 book ai didi

java - HPROF结果解释

转载 作者:行者123 更新时间:2023-12-02 06:33:27 24 4
gpt4 key购买 nike

我有两组 HProf 转储,一组用于大样本,另一组用于较小样本 - 两者都来 self 拥有的大量数据中的一个非常小的样本。我正在尝试找出我的方法中的瓶颈。

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

我注意到 char[] 占用了我大部分的内存。而且 char[] 占用的内存百分比从小样本运行到大样本运行都不同。我不知道当我分析整个样本时它会发生什么变化。

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

这是我的方法,

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 末尾范围扩大,因此我不关心删除/释放它们。你们感觉到任何瓶颈吗?

最佳答案

Since, the objects created inside the myFunction will scope out at the end of myFunction

不,他们不会。这不是 C++。所有对象都在堆上创建并保持存在,直到可进行垃圾回收。

此外,您还没有在伪代码中的任何位置声明 op_line ,因此我假设它在方法调用之间保留,我猜这就是您的内存泄漏。我的意思是,您不可能拥有由 > 1 亿字节组成的单个字符数组,这就是“小”堆转储所说的内容。

关于java - HPROF结果解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19882336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com