Tag: 内存泄漏

为什么在popViewController之后ARC没有释放内存

我在UINavigationController中推送和popupViewControllers。 我正在跟踪我的应用程序的内存消耗。 虽然推新viewController内存消耗逐渐增加,但是当我popup相同的ViewController使用[self.navigationController popViewControllerAnimated:NO]; 内存消耗不减less,但不变。 该特定的viewController可以被用户多次推送和popup,这可能导致应用程序在RAM中的高内存消耗。 我应该怎么做来优化我的内存消耗?

线程closures期间Win64 Delphi RTL中的内存泄漏?

很长一段时间,我注意到我的服务器应用程序的Win64版本泄漏内存。 虽然Win32版本在相对稳定的内存占用情况下工作正常,但是64位版本使用的内存有规律地增加 – 也许20Mb /天,没有任何明显的原因(不用说,FastMM4没有报告任何内存泄漏) 。 源代码在32位和64位版本之间是相同的。 该应用程序是围绕Indy TIdTCPServer组件构build的,它是一个连接到数据库的高度multithreading服务器,该数据库处理由Delphi XE2制作的其他客户端发送的命令。 我花了很多时间审查我自己的代码,并试图了解为什么64位版本泄漏了这么多的内存。 我最终通过使用MS工具来追踪DebugDiag和XPerf之类的内存泄漏,似乎在Delphi 64位RTL中存在一个根本的缺陷,每当线程从DLL中分离出来,都会导致一些字节被泄漏。 此问题对于必须全天候运行而不重新启动的高度multithreading应用程序尤其关键。 我用由XE2构build的主机应用程序和库组成的非常基本的项目重现了这个问题。 该DLL与主机应用程序静态链接。 主机应用程序创build线程,只是调用虚拟导出的过程并退出: 这里是库的源代码: library FooBarDLL; uses Windows, System.SysUtils, System.Classes; {$R *.res} function FooBarProc(): Boolean; stdcall; begin Result := True; //Do nothing. end; exports FooBarProc; 主机应用程序使用计时器来创build一个只调用导出过程的线程: TFooThread = class (TThread) protected procedure Execute; override; public constructor Create; end; … function FooBarProc(): […]

我是否需要删除事件监听器?

如果我有一个具有绑定了事件监听器的子代的父元素,在清除父代之前是否需要删除这些事件监听器? (即, parent.innerHTML = ''; )如果事件侦听器没有从元素中解除绑定(如果从DOM中移除),是否会有内存泄漏?

在c#中显式释放内存

我创build了ac#应用程序,占用了150MB的内存(专用字节),主要是由于一个大字典: Dictionary<string, int> Txns = new Dictionary<string, int>(); 我想知道如何释放这个内存。 我试过这个: Txns = null; GC.Collect(); 但是,我的私人字节似乎并没有太大的影响 – 从155mb降到145mb。 任何线索? 谢谢 -编辑- 好吧,我有这个代码更多的运气(它获得私人字节下降到50MB),但为什么? Txns.Clear(); // <- makes all the difference Txns = null; GC.Collect(); -编辑- 对于那些说'不要使用GC.collect'的人来说,没关系(我不打算讨论这个问题,除了说你可以看到我的C背景通过),但是它并没有真正回答我的问题:为什么垃圾收集器只有在清除事务列表时才释放内存? 不pipe怎样,它不应该释放内存,因为字典已经取消了?

debugging堆概要分析中不显示的内存泄漏

我正在接收和处理JSON请求的Haskell守护进程。 虽然守护进程的操作是复杂的,但主要的结构是故意保持简单:其内部状态只是一个具有数据结构的IORef ,所有线程都在这个IORef上执行primefaces操作。 然后有一些线程在触发器上取值a做一些事情。 问题是守护进程正在泄漏内存,我找不到原因。 这当然与请求有关:当守护进程每秒获得几个请求时,它会泄漏1MB / s的东西(如Linux工具所报告的)。 内存消耗稳步增加。 没有请求,内存消耗保持不变。 令我感到困惑的是,这些都没有显示在GHC分析中。 要么我在configuration文件参数中丢失了某些内容,或者内存被别的东西占用了: 用+RTS -hc -xt -p运行+RTS -hc -xt -p : 运行+RTS -hr -xt -p : 在此testing运行期间,守护进程随后消耗超过1GB。 所以分析数据显然不符合实际消耗的内存数量级。 (据我所知,RTS,GC和configuration本身增加了实际的内存消耗,但是这种差别太大了,并不符合不断增长的消耗。) 我已经尝试过处理rnf中守护进程的所有状态数据,以及parsing的JSON请求(以避免部分JSONstring被保留在某处),但是没有太多成功。 任何意见或build议表示欢迎。 更新:守护进程在没有-threaded情况下运行,所以没有OS级的线程。 GC统计信息比堆分析更接近Linux报告的数字: Alloc Copied Live GC GC TOT TOT Page Flts bytes bytes bytes user elap user elap […] 5476616 44504 2505736 0.00 0.00 23.21 […]

.NET WCF w3wp本地内存泄漏和加载程序堆中的大小为0的18kdynamic程序集

我们的WCF服务显示了大量内存使用的实例,所以我们花了一个完整的内存转储来确定问题。 Operating System Windows Server 2008 R2Service Pack 1 Number Of Processors 4 Process Image c:\Windows\System32\inetsrv\w3wp.exe System Up-Time 40 day(s) 09:23:09 Process Up-Time 14 day(s) 11:49:01 .NET 4.0 Processor Type X64 Process Bitness 64-Bit 从DebugDiag报告的问题的直升机视图。 进程是垃圾收集,所以根据警告我不应该信任!heap命令的所有输出。 Gc堆:1.37 GBytes .NETcaching大小为750Mb, 虚拟内存详细信息:虚拟分配:17.45 Gb加载模块:208.68 Mb线程数:25 Mb本地堆积:3.06 Gb(我很关心这个) 从上面的3.02 Gb出现在Heap 0x003f0000 。 我们有很好的stream量,这样1.3 gb Gb的堆大小感觉对我来说是正常的。 此外,我们有32 gb RAM和64位地址空间的机器,所以caching大小750 mb是可以接受的。 […]

何时以及如何将java classloader标记为垃圾收集?

我们正在创build多个子类加载器,将多个子应用程序加载到Java应用程序“容器”中,进行热部署的原型devise。 当一个特定类加载器的类path发生了变化(例如,jar被添加,删除,更新)时,旧的类加载器被抛弃(未引用),并为jar的新类path创build一个新的类加载器。 更新类path后,触发热部署,我们采取了堆转储。 堆转储(使用内存分析器)表明旧的类加载器没有被垃圾回收。 父类加载器中的某些类正在caching旧的类加载器。 下面的东西被调用来清除这些caching: java.lang.ResourceBundle.clearCache(classLoader); org.apache.commons.logging.LogFactory.release(classLoader); java.beans.Introspector.flushCaches(); 即使在清除了上述caching之后,旧的加载器仍然没有被垃圾收集。 其余的类加载器引用如下: 由类加载器加载的类 java.lang.Package由类加载器本身创build java.lang.ProtectionDomain由类加载器本身创build 以上所有都是类加载器中的循环引用,它应该触发一个垃圾回收。 我不知道为什么不是。 有人知道为什么旧的类加载器仍然不被垃圾收集,即使是循环引用?

线程本地和内存泄漏

在多个post中提到:不恰当的使用ThreadLocal导致内存泄漏。 我正在努力了解如何使用ThreadLocal发生内存泄漏。 我唯一的想法是如下: 一个Web服务器维护一个线程池(例如servlet)。 如果ThreadLocal中的variables没有被删除,这些线程可能会造成内存泄漏,因为线程不会死亡。 这种情况下没有提到“Perm Space”内存泄漏。 这是内存泄漏的唯一(主要)用例吗?

WKWebView导致我的视​​图控制器泄漏

我的视图控制器显示一个WKWebView。 我安装了一个消息处理程序,一个很酷的Web Kitfunction,可以让我的代码从网页内部得到通知: override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) let url = // … self.wv.loadRequest(NSURLRequest(URL:url)) self.wv.configuration.userContentController.addScriptMessageHandler( self, name: "dummy") } func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) { // … } 到目前为止这么好,但现在我发现我的视图控制器正在泄漏 – 当它被解除分配时,它不是: deinit { println("dealloc") // never called } 看起来,仅仅将自己安装为消息处理程序会导致保留周期,从而导致泄漏!

使用Python列表作为队列的效率

最近一位同事写了一个程序,用Python列表作为队列。 换句话说,当需要插入项目时使用了.append(x) ,而在需要删除项目时使用了.pop(0) 。 我知道Python有collections.deque ,我试图找出是否花费我的(有限的)时间来重写这段代码来使用它。 假设我们执行数以百万计的追加和popup,但从来没有超过几千个条目,他的列表使用会成为一个问题? 特别是,Python列表实现所使用的底层数组是否会继续无限增长,即使列表只有一千个东西,或者Python最终是否会重新realloc并释放一些内存?