我已经注意到我正在构建的应用程序中存在一些内存泄漏,在玩了一段时间后,FF将开始耗尽越来越多的内存(超过1 000 000 k).
我做了一些研究,发现如果我做一个$(selector).html(some stuff)
替换内容的东西,jQuery处理程序从元素以前的内容将不会被删除并导致一些问题,我已经修复了所有这些.
我的问题是,如果我销毁一个对话框,$(mydialog).dialog('destroy');
将删除附加到该对话框中的各种元素的处理程序?
谢谢!
我一直在尝试诊断我正在编写的Android应用程序中的内存泄漏.我有一个堆转储加载到Eclipse中,但我看到的结果非常好奇.堆中有大约20,000个异常实例(特别是来自UnboundID LDAP库的LDAPException),没有入站引用.
也就是说,它们出现在支配者树的根部.OQL SELECT objects e FROM com.unboundid.ldap.sdk.LDAPException e WHERE (inbounds(e).length = 0)
返回超过20,000个结果,总计几乎所有堆.然而,GC在堆转储之前运行,我可以看到它在执行泄漏代码期间反复运行在控制台中.如果这些实例没有入站参考,那么可以让它们保持活力?
我也尝试过"最短的GC路径"查询.它显示了一个保留2个实例的LDAPConnectionReader行,以及LDAPException @ <addr> unknown
具有各种十六进制地址的~20k 行.
更新:自发布以来我没有时间进一步诊断,我发布的奖金在我可能会结束之前就已经结束了.我现在尽可能地奖励它,以免浪费点数.感谢所有关注此事的人!我将稍后回来并再次更新进一步诊断的结果,当生活稍微忙碌时.
我有一个插件,非常大,我需要了解一些事情......
插件在页面上添加了一些元素,请求页面的一部分并更新DOM.每次重新加载页面时内存都会增加,即使关闭选项卡后内存也不会释放.
我正在尝试使用DOM元素(添加/删除它们)显示动态可变数据操作.我发现了几乎所有浏览器的一个非常奇怪的行为:在我删除一个DOM元素然后添加一个新元素后,浏览器不会释放被删除的DOM项所占用的内存.请参阅下面的代码以了解我的意思.运行此页面后,它将逐步进入150 MB的内存.有谁能解释我这种奇怪的行为?或者也许我做错了什么?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script type="text/javascript">
function redrawThings() {
// Removing all the children from the container
var cont = document.getElementById("container");
while ( cont.childNodes.length >= 1 ) {
cont.removeChild(cont.firstChild);
}
// adding 1000 new children to the container
for (var i = 0; i < 1000; i++) {
var newDiv = document.createElement('div');
newDiv.innerHTML = "Preved medved " + i;
cont.appendChild(newDiv);
}
}
</script>
<style type="text/css">
#container {
border: 1px solid blue;
}
</style> …
Run Code Online (Sandbox Code Playgroud) 如何检测Android JNI代码中的内存泄漏?我正在使用Froyo
我一直在使用jQuery在所有主流浏览器中遇到一些内存泄漏,我正在寻找一些帮助.我读过很多关于内存泄漏,引用,循环引用,闭包等的文章.我想我做的一切都是正确的.但我仍然看到IE9和FF4中的内存增加以及sIEve中的孤儿对我来说没有意义.
我已经创建了一个测试用例来展示这个问题.测试用例基本上有一个500行的大表,用户可以点击每一行进入内联编辑模式,其中使用jQuery追加元素.当用户退出内联编辑模式时,将删除元素.
测试用例有一个按钮可模拟100行100次点击以快速放大问题.
当我在sIEve中运行它时,内存增加1600KB,使用量增加506,并且有99个孤儿.有趣的是,如果我在第123行注释掉.remove(),内存增加1030KB,使用量增加11,并且有0个孤儿.
当我在IE9中运行它时,内存增加5900KB.刷新再增加1500KB,另一次运行增加1K.继续这种模式继续增加内存使用
当我在FF4中运行它时,如果我使用"100次点击缓慢"和"100次快速点击",我会得到非常不同的行为.模拟慢速点击的峰值增加了8300KB,它需要一分钟才能达到3300KB.模拟快速点击的峰值增加了27,700KB,然后需要一分钟才能达到4700KB.请注意,这与执行的代码完全相同,执行之间的延迟更少.刷新和另一次运行继续以类似的速率增加内存.
示例代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN">
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript">
var clickcounter = 0;
var clickdelay = 0;
var clickstart = 0;
var clicklimit = 0;
$(document).ready(function(){
// Create a table with 500 rows
var tmp = ['<table>'];
for (var i = 0; i < 500; i++) {
tmp.push('<tr id="product_id',i+1,'" class="w editable">');
tmp.push('<td class="bin">',i+1,'</td>');
tmp.push('<td class="productcell" colspan="2">Sample Product Name<div class="desc"></div></td>');
tmp.push('<td class="percentcost">28%</td>');
tmp.push('<td class="cost">22.50</td>');
tmp.push('<td class="quantity">12</td>');
tmp.push('<td class="status">Active</td>');
tmp.push('<td …
Run Code Online (Sandbox Code Playgroud) 我正在使用Tomcat 6.0.18.取消部署我的应用程序后,HttpClient似乎持有对WebappClassLoader的引用,从而导致内存泄漏.
经过一番调查,我在Tomcat 7.0.6,JreMemoryLeakPreventionListener中找到了带有keepAliveProtection属性的解决方案.但是这种方法不适用于Tomcats 6(我已经定制了JreMemoryLeakPreventionListener,以便添加对此属性的支持).
有没有人有解决方案如何在Tomcat 6中修复这个漏洞?感谢名单!
我偷看了我的祖先的代码,发现在以下情况下泄漏:
1)启动应用程序
b )启动应用程序后,在4秒内关闭应用程序
泄漏消息:
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp(306) : {58509} client block at 0x016DFA30, subtype c0, 68 bytes long.
Run Code Online (Sandbox Code Playgroud)
随后,我通过代码,在控制工作线程功能的4个睡眠中发现了可疑的原因.
测试程序:
UINT InitThread(LPVOID pParam)
{
Sleep(4000); //4000 is the default value, it reads from a registry key.
CMyMFCTestProjectDlg* pTest = (CMyMFCTestProjectDlg*)pParam;
pTest->DoSomething();
return 0; //--> Exit thread
}
BOOL CMyMFCTestProjectDlg::OnInitDialog() {
...
AfxBeginThread(InitThread, this);
...
}
Run Code Online (Sandbox Code Playgroud)
如果我减少/移除睡眠定时器,泄漏将被解决.
但是,我想知道它是如何发生的.是由于工作线程还是GUI线程终止?GUI线程后工作线程是否会退出会导致此问题?
任何人都可以通过帮我解释一下来振作起来吗?我迷路了....
我有一个简单的wpf应用程序.在主窗口中,我有堆栈面板和2个按钮.第一个按钮添加了100个用户控件(没有任何数据绑定,事件,位图),第二个按钮从面板中删除所有这些控件并调用GC.Collect().并且存在一些问题:1.在我第一次单击"删除"按钮并不是我的所有内存释放后,我必须单击它几次以释放更多内存.2. 5-10分钟内存释放后,但不会有几兆字节.
例如,在我的应用程序启动之后,当我添加500个控件时需要~22mb - 在我第一次点击"删除"按钮后~~~60mb~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ,我不明白这一点,我是WPF的新手,也许我想念一些我想立刻释放内存的东西.
<Window x:Class="WpfApplication10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="385" Width="553">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="240*" />
<RowDefinition Height="25" />
</Grid.RowDefinitions>
<Grid
Name="border1"
Grid.Row="1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" >
<ScrollViewer VerticalAlignment="Stretch"
Name="scrollViewer1"
HorizontalAlignment="Stretch">
<StackPanel
Margin="3,3,3,3"
Background="Transparent"
VerticalAlignment="Stretch"
Name="activityStackPanel"
HorizontalAlignment="Stretch">
</StackPanel>
</ScrollViewer>
</Grid>
<Button Content="Button" Grid.Row="2" Height="23" HorizontalAlignment="Left" Margin="12,0,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<Button Content="Button" Grid.Row="2" Height="23" HorizontalAlignment="Left" Margin="141,0,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
<Label Content="Label" Grid.RowSpan="2" Height="28" HorizontalAlignment="Left" Margin="34,0,0,0" Name="label1" VerticalAlignment="Top" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
namespace WpfApplication10
{
public …
Run Code Online (Sandbox Code Playgroud) 我正在用C++编写一个使用一些外部开源库的应用程序.我试着查看Ubuntu系统监视器以获取有关我的进程如何使用资源的信息,并且我注意到常驻内存继续增加到非常大的值(超过100MiB).这个应用程序应该在嵌入式设备中运行,所以我必须要小心.
我开始认为应该有(某些)内存泄漏,所以我正在使用valgrind.不幸的是,似乎valgrind没有报告显着的内存泄漏,只有我正在使用的库中的一些小问题,仅此而已.
那么,我必须得出结论,我的算法确实使用了那么多内存吗?这对我来说似乎很奇怪......或者我可能误解了系统监视器列的含义?当与软件分析相关时,有人可以在系统监视器中澄清"虚拟内存","常驻内存","可写内存"和"内存"的含义吗?我是否应该期望这些值能够立即表示我的进程在RAM中占用了多少内存?
在过去,我使用的工具能够告诉我在哪里使用内存,比如Apple Profiling Tools.我可以在Linux中使用类似的东西吗?
谢谢!