标签: memory-leaks

打开HPROF文件时出错:IOException:未知的HPROF版本

尝试Debug.dumpHprofData使用Memory Analyzer 打开HPROF文件(由...创建)时,我收到以下异常:

java.io.IOException: Unknown HPROF Version (JAVA PROFILE 1.0.3)
at org.eclipse.mat.hprof.AbstractParser.readVersion(AbstractParser.java:124)
at org.eclipse.mat.hprof.Pass1Parser.read(Pass1Parser.java:69)
at org.eclipse.mat.hprof.HprofIndexBuilder.fill(HprofIndexBuilder.java:65)
at org.eclipse.mat.parser.internal.SnapshotFactoryImpl.parse(SnapshotFactoryImpl.java:203)
at org.eclipse.mat.parser.internal.SnapshotFactoryImpl.openSnapshot(SnapshotFactoryImpl.java:114)
at org.eclipse.mat.snapshot.SnapshotFactory.openSnapshot(SnapshotFactory.java:143)
at org.eclipse.mat.snapshot.SnapshotFactory.openSnapshot(SnapshotFactory.java:123)
at org.eclipse.mat.ui.snapshot.ParseHeapDumpJob.run(ParseHeapDumpJob.java:56)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

android memory-leaks dump

119
推荐指数
3
解决办法
3万
查看次数

内存泄漏到底能走多远?

我多次遇到内存泄漏.通常当我malloc像没有明天,或者FILE *像脏衣服一样晃来晃去.我通常假设(读:绝望地希望)至少在程序终止时清理所有内存.是否存在程序终止或崩溃时无法收集泄漏内存的情况?

如果答案在语言与语言之间差异很大,那么让我们关注C(++).

请注意短语的双曲线使用,"就像没有明天","悬挂......就像脏衣服".不安全的*malloc*会伤害你所爱的人.此外,请小心脏衣服.

c c++ memory memory-leaks

118
推荐指数
7
解决办法
7342
查看次数

增加(或减少)R进程可用的内存

我想增加(或减少)R可用的内存量.实现此目的的方法有哪些?

memory-leaks memory-management r

115
推荐指数
6
解决办法
19万
查看次数

如果.NET中的MemoryStream未关闭,是否会创建内存泄漏?

我有以下代码:

MemoryStream foo(){
    MemoryStream ms = new MemoryStream();
    // write stuff to ms
    return ms;
}

void bar(){
    MemoryStream ms2 = foo();
    // do stuff with ms2
    return;
}
Run Code Online (Sandbox Code Playgroud)

我分配的MemoryStream是否有可能以后不能被处理掉?

我有一个同行评审坚持我手动关闭它,我找不到信息来判断他是否有一个有效点.

.net c# memory-leaks memorystream

108
推荐指数
6
解决办法
7万
查看次数

有没有办法以编程方式判断FastMM是否没有释放特定的内存块?

我试图检测是否释放了一块内存.当然,经理告诉我通过对话框或日志文件,但如果我想将结果存储在数据库中该怎么办?例如,我想在数据库表中包含分配给定块的例程的名称.

在阅读了FastMM的文档之后,我知道从版本4.98开始,我们有可能被管理员通知内存分配,释放和重新分配.例如,OnDebugFreeMemFinish事件传递给我们a PFullDebugBlockHeader包含有用的信息.PFullDebugBlockHeader缺少一件事- 如果给定的块被应用程序释放,则会显示信息.

除非OnDebugFreeMemFinish仅为未释放的块调用?这是我不知道并想知道的.

问题是,即使挂钩OnDebugFreeMemFinish事件,我也无法找出该块是否被释放.

这是一个例子:

program MemLeakTest;

{$APPTYPE CONSOLE}

uses
  FastMM4, ExceptionLog, SysUtils;


procedure MemFreeEvent(APHeaderFreedBlock: PFullDebugBlockHeader; AResult: Integer);
begin
//This is executed at the end, but how should I know that this block should be freed
//by application? Unless this is executed ONLY for not freed blocks.
end;

procedure Leak;
var
  MyObject: TObject;
begin
  MyObject := TObject.Create;
end;

begin
  OnDebugFreeMemFinish := MemFreeEvent;
  Leak;
end.
Run Code Online (Sandbox Code Playgroud)

我缺少的是回调,如:

procedure OnMemoryLeak(APointer: PFullDebugBlockHeader);
Run Code Online (Sandbox Code Playgroud)

在浏览FastMM的源代码后,我发现有一个过程: …

delphi memory-leaks delphi-2009 fastmm

103
推荐指数
1
解决办法
2609
查看次数

程序退出时是否释放泄漏的内存?

如果我编程 - 不知道它 - 内存泄漏,并且应用程序终止,泄漏的内存是否被释放?

c++ memory-leaks

100
推荐指数
6
解决办法
3万
查看次数

大对象堆碎片

我正在研究的C#/ .NET应用程序正在遭受缓慢的内存泄漏.我已经使用CDB和SOS来尝试确定发生了什么,但数据似乎没有任何意义,所以我希望你们中的一个人之前可能已经经历过这种情况.

该应用程序在64位框架上运行.它不断地计算并将数据序列化到远程主机,并且正在大量地击中大对象堆(LOH).但是,我希望大多数LOH对象都是瞬态的:一旦计算完成并且已经发送到远程主机,就应该释放内存.然而,我所看到的是大量(实时)对象数组与空闲的内存块交织,例如,从LOH中获取一个随机段:

0:000> !DumpHeap 000000005b5b1000  000000006351da10
         Address               MT     Size
...
000000005d4f92e0 0000064280c7c970 16147872
000000005e45f880 00000000001661d0  1901752 Free
000000005e62fd38 00000642788d8ba8     1056       <--
000000005e630158 00000000001661d0  5988848 Free
000000005ebe6348 00000642788d8ba8     1056
000000005ebe6768 00000000001661d0  6481336 Free
000000005f214d20 00000642788d8ba8     1056
000000005f215140 00000000001661d0  7346016 Free
000000005f9168a0 00000642788d8ba8     1056
000000005f916cc0 00000000001661d0  7611648 Free
00000000600591c0 00000642788d8ba8     1056
00000000600595e0 00000000001661d0   264808 Free
...
Run Code Online (Sandbox Code Playgroud)

显然,如果我的应用程序在每次计算期间创建长寿命的大对象,我会期望这种情况.(它确实这样做,我接受会有一定程度的LOH碎片,但这不是问题.)问题是你可以在上面的转储中看到的非常小的(1056字节)对象数组,我在代码中看不到正在创建,并以某种方式保持根深蒂固.

另请注意,转储堆段时CDB不报告类型:我不确定这是否相关.如果我转储标记的(< - )对象,CDB/SOS报告正常:

0:015> !DumpObj 000000005e62fd38
Name: System.Object[]
MethodTable: 00000642788d8ba8
EEClass: 00000642789d7660
Size: 1056(0x420) bytes
Array: Rank 1, Number of elements 128, Type CLASS …
Run Code Online (Sandbox Code Playgroud)

.net c# memory-leaks memory-management windbg

96
推荐指数
2
解决办法
3万
查看次数

诊断内存泄漏 - 允许#bytes的内存大小耗尽

我遇到了可怕的错误消息,可能通过艰苦的努力,PHP内存不足:

在第123行的file.php中,####字节的允许内存大小耗尽(尝试分配####字节)

增加限制

如果您知道自己在做什么并希望增加限制,请参阅memory_limit:

ini_set('memory_limit', '16M');
ini_set('memory_limit', -1); // no limit
Run Code Online (Sandbox Code Playgroud)

谨防!你可能只是解决症状而不是问题!

诊断泄漏:

错误消息指向一条带有循环的行,我认为该循环正在泄漏或不必要地累积内存.我memory_get_usage()在每次迭代结束时打印语句,可以看到数字慢慢增长,直到达到极限:

foreach ($users as $user) {
    $task = new Task;
    $task->run($user);
    unset($task); // Free the variable in an attempt to recover memory
    print memory_get_usage(true); // increases over time
}
Run Code Online (Sandbox Code Playgroud)

对于这个问题的目的,让我们假设最坏的面条代码可以想象在全球范围内的某处藏匿在$userTask.

什么工具,PHP技巧或调试巫毒可以帮助我找到并解决问题?

php memory-leaks

94
推荐指数
7
解决办法
9万
查看次数

永远不会解决的承诺导致内存泄漏?

我有一个Promise.我创建它以在需要时取消AJAX请求.但是因为我不需要取消那个AJAX,所以我从未解决它并且AJAX成功完成.

一个简化的片段:

var defer = $q.defer();
$http({url: 'example.com/some/api', timeout: defer.promise}).success(function(data) {
    // do something
});

// Never defer.resolve() because I don't need to cancel that ajax. What happens to this promise after request?
Run Code Online (Sandbox Code Playgroud)

永远不会解决这样的承诺导致内存泄漏?您对如何管理Promise生命周期有什么建议吗?

javascript memory-leaks promise angularjs angular-promise

85
推荐指数
1
解决办法
2万
查看次数

在分配的内存上*不*使用free()是否可以?

我正在学习计算机工程,我有一些电子课程.我听到了,从我的两个教授(这些课程),有可能避免使用的free()功能(后malloc(),calloc()等),因为分配可能不会被再次使用的存储空间分配等内存.也就是说,例如,如果您分配4个字节然后释放它们,您将有4个字节的空间可能不会再次分配:您将有一个漏洞.

我认为这很疯狂:你不能拥有一个非玩具程序,你可以在堆上分配内存而不释放它.但是我没有足够的知识来解释为什么它如此重要以至于每一个都malloc()必须有一个free().

那么:在没有使用的情况下,是否有可能适合malloc()使用free()?如果没有,我该如何向我的教授解释这一点?

c c++ heap memory-leaks memory-management

83
推荐指数
5
解决办法
7793
查看次数