Tag: 内存泄漏

为什么jQuery的内存泄漏太严重了?

这是我上周发布的一个问题的后续: 简单的jQuery Ajax调用在Internet Explorer中泄漏内存 我喜欢jquery语法及其所有不错的function,但是我一直遇到一个通过ajax调用泄漏内存来自动更新表格单元的页面。 所以我创build了两个简单的testing页面进行实验。 两页都会每隔1秒做一次ajax调用。 每次Ajax调用成功后,计数器递增并更新DOM。 脚本在1000个周期后停止。 一个使用jQuery的Ajax调用和更新DOM。 另一个使用Yahoo API作为ajax,并执行document.getElementById(…)。innerHTML来更新DOM。 jquery版本严重泄漏内存。 运行在IE7的XP Home上,从9MB开始,到48MB左右,内存一直呈线性增长。 如果我注释掉更新DOM的行,它仍然在32MB,表明即使是简单的DOM更新泄漏大量的内存。 非jQuery版本的启动和结束大约9MB,无论是否更新DOM。 有没有人有一个很好的解释是什么导致jquery泄漏如此严重? 我错过了什么明显的? 有没有我不知道的循环引用? 或者jquery只是有一些严重的内存问题? 这是leaky(jquery)版本的来源: <html> <head> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load('jquery', '1.4.2'); </script> <script type="text/javascript"> var counter = 0; leakTest(); function leakTest() { $.ajax({ url: '/html/delme.x', type: 'GET', success: incrementCounter }); } function incrementCounter(data) { if […]

RAII与垃圾收集器

我最近在CppCon 2016上观看了Herb Sutter关于“Leak Free C ++ …”的畅谈,他谈到了如何使用智能指针来实现RAII(资源获取是初始化) – 概念以及它们如何解决大部分的内存泄漏问题。 现在我在想。 如果我严格遵循RAII规则,这似乎是一件好事,那么为什么这与C ++中的垃圾收集器有什么不同呢? 我知道,在RAII中,程序员完全控制了资源何时被释放,但是在任何情况下都有利于只有垃圾收集器? 会不会有效率? 我甚至听说有一个垃圾收集器可以更有效率,因为它可以一次释放更大的内存块,而不是释放整个代码中的小内存块。

跟踪Java中的内存泄漏/垃圾收集问题

这是我一直试图追查几个月的问题。 我有一个Java应用程序运行该进程的XML饲料并将结果存储在数据库中。 有间歇性的资源问题,很难追查。 背景:在生产箱(问题最明显的地方),我没有特别好的访问权限,并且无法运行Jprofiler。 那个盒子是一个64位四核,运行centos 5.2的8gb机器,tomcat6和java 1.6.0.11。 它从这些java-opts开始 JAVA_OPTS="-server -Xmx5g -Xms4g -Xss256k -XX:MaxPermSize=256m -XX:+PrintGCDetails – XX:+PrintGCTimeStamps -XX:+UseConcMarkSweepGC -XX:+PrintTenuringDistribution -XX:+UseParNewGC" 技术堆栈如下: Centos 64位5.2 Java 6u11 雄猫6 Spring / WebMVC 2.5 hibernate3 石英1.6.1 DBCP 1.2.1 Mysql 5.0.45 Ehcache 1.5.0 (当然还有一些其他的依赖项,特别是雅加达公共图书馆) 最近我可以重现这个问题是一个32位的内存要求较低的机器。 我有控制权。 我已经用JProfiler探测死了,并修复了许多性能问题(同步问题,预编译/cachingxpath查询,减less线程池,并消除不必要的hibernate预取,以及在处理过程中overzealous“高速caching预热”)。 在每种情况下,剖析者都将这些资源视为占用了大量资源,并且一旦变化进入,这些资源已经不再是主要资源。 问题: JVM似乎完全忽略了内存使用情况设置,填满了所有的内存并且没有响应。 对于面向客户的客户来说,这是一个问题,他们期望定期进行投票(5分钟和1分钟重试),同样也适用于我们的运营团队,他们经常被告知一个箱子没有响应,必须重新启动。 这个盒子上没有别的重要的东西了。 这个问题似乎是垃圾收集。 我们使用ConcurrentMarkSweep(如上所述)收集器,因为原始的STW收集器导致JDBC超时并且变得越来越慢。 这些日志显示,随着内存使用量的增加,开始抛出cms失败,并且回到原来的停止世界的收集器,然后收集器似乎不能正确收集。 然而,使用jprofiler运行,“运行GC”button似乎很好地清理内存,而不是显示增加的足迹,但由于我不能直接连接到生产框jprofiler,并解决经certificate的热点似乎没有工作我是留下了调整垃圾收集盲目的巫术。 我曾经尝试过: 分析和修复热点。 使用STW,并行和CMS垃圾收集器。 以最小/最大堆大小以1 / […]

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

我正在学习计算机工程,还有一些电子课程。 我从我的两位教授(这些课程)听说,有可能避免使用free()函数(在malloc() , calloc()等之后),因为分配的内存空间可能不会再被使用分配其他内存。 也就是说,例如,如果你分配了4个字节然后释放它们,你将有4个字节的空间可能不会再被分配:你将会有一个漏洞 。 我觉得这很疯狂:你不能在没有释放它的情况下在堆上分配内存,而不能有一个非玩具程序 。 但是我没有足够的知识来解释为什么对每个malloc()必须有一个free() 。 所以:有没有在不使用free()情况下使用malloc()情况? 如果没有,我怎么能向我的教授解释呢?

大对象堆碎片

我正在处理的C#/。NET应用程序正在遭受缓慢的内存泄漏。 我曾经使用CDB与SOS来确定发生了什么,但是这些数据似乎没有任何意义,所以我希望你们中的一个人可能以前经历过这种情况。 该应用程序在64位框架上运行。 它正在不断地计算和串行化数据到远程主机,并且正好击中大对象堆(LOH)。 但是,大多数的LOH对象我都希望是暂时的:一旦计算完成并被发送到远程主机,内存应该被释放。 然而,我所看到的是大量的(活)对象数组与交替的空闲块,例如,从LOH中随机select一个段: 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 […]

检测到可能的EventEmitter内存泄漏

我收到以下警告: (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. Trace: at EventEmitter.<anonymous> (events.js:139:15) at EventEmitter.<anonymous> (node.js:385:29) at Server.<anonymous> (server.js:20:17) at Server.emit (events.js:70:17) at HTTPParser.onIncoming (http.js:1514:12) at HTTPParser.onHeadersComplete (http.js:102:31) at Socket.ondata (http.js:1410:22) at TCP.onread (net.js:354:27) 我在server.js中写这样的代码: http.createServer( function (req, res) { … }).listen(3013); 如何解决这个问题?

有没有办法通过编程来判断FastMM是否没有释放特定的内存块?

我试图检测一个内存块是否没有被释放。 当然,经理告诉我,通过对话框或日志文件,但是如果我想将结果存储在数据库中呢? 例如,我想在数据库表中有分配给定块的例程名称。 在阅读FastMM的文档之后,我知道从4.98版本开始,我们就有可能通过pipe理员通知内存分配,释放和重新分配。 例如OnDebugFreeMemFinish事件传递给我们一个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. […]

Python内存泄漏

我有一个长时间运行的脚本,如果运行时间足够长,将占用我系统上的所有内存。 没有详细说明剧本,我有两个问题: 是否有任何“最佳实践”要遵循,这将有助于防止泄漏发生? 有哪些技术来debuggingPython中的内存泄漏?

错误打开HPROF文件

尝试使用Memory Analyzer打开HPROF文件(由Debug.dumpHprofData创build)时出现以下exception: 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) 我如何解决这个问题? 谢谢

内存泄漏能走多远?

我多次遇到内存泄漏。 通常当我是malloc-像没有明天,或悬挂FILE * s像脏衣服。 我通常假设(阅读:绝望地希望)所有内存至less在程序终止时被清除。 当程序终止或崩溃时,有没有泄漏的内存不会被收集的情况? 如果答案从语言到语言的差别很大,那么让我们关注C(++)。 请注意这句话的双曲线用法,“就像没有明天”,“摇摆不定……像脏衣服”。 不安全* malloc * ing会伤害你所爱的人。 另外,脏衣服请小心。