- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
HERE IS THE HEAD DUMP (UPDATED ON 10/29/2013)
我在一个网络应用中工作:
经过大量工作,我设法删除了所有对类加载器的强引用,现在它是垃圾收集器的候选者。那么,内存泄漏解决了吗?当然不是!因为在几次热部署之后,由于 PermGen 空间出现了 OOME。
感谢 Yourkit,我能够检查 WebappClassLoader
是 Pending Finalization 这意味着它正在终结队列中等待(实际上,不是 WebappClassLoader
本身就是他的一个referents)。检查内存快照时,我发现了几个对 Oracle Coherence 类的 Finalizer
引用...
这看起来很“好”:Coherence 对象正在等待垃圾回收,这要归功于移除所有强引用所做的所有艰苦工作(杀死所有 coherence 线程,移除 java 安全提供程序等)。我认为这里没有什么可做的。
所以,我在考虑一些 finalize
执行会破坏某些东西,然后不允许清空终结器队列。但奇怪的是,使用 JMX 或 jmap -finalizerinfo
终结器队列似乎是空的!这一切都非常令人困惑,所以我一直在其他地方搜索......
你认为这是这里要做的事吗? 我读过一些关于 CGLIB enhancing the finalize
method 的东西.如果我有权访问 Enhancer
,我可以按照说明创建一个回调过滤器 here但我不知道如何使用 Spring AOP 来管理它。
好吧,在其他地方搜索,我发现了几个来自 java.lang.reflect.Proxy
的弱引用。这些是 jdk 动态代理吧?或者它们与内省(introspection)内存泄漏有关?弱引用?
信息:我正在使用 Spring 的上下文监听器来刷新 Instrospector 的缓存 (java.beans.Introspector.flushCaches()
)。 我还能用它做什么?
让我们继续。
然后,我们还有来自 java.io.ObjectStreamClass$Caches
的其他几个弱引用。我的很多业务对象都有这种弱引用。
也许我需要刷新这些缓存。 但是如何呢??
然后我们有这些与 com.sun.internal.ResourceManager
、java.util.logging.Logging
和 java.lang.reflect 相关的弱引用。代理
我能用这个弱引用做什么?我需要担心这个还是问题出在终结器队列上?任何线索都会有帮助......真的:-D
啊,还有一件事,我从 tomcat 的“主”线程中发现了一个弱引用,它永远不会被 tomcat 更新。我知道我的应用程序可以在某些 tomcat 线程中保留一些线程局部变量,但是 tomcat 7 renew these threads to avoid class loader memory leaks .
我认为这是我的内存快照中最奇怪的东西,但这是弱引用吗?我可以用它做什么?
编辑:阅读java.lang.ref
javadoc我发现了这个:
An object is weakly reachable if it is neither strongly nor softly reachable but can be reached by traversing a weak reference. When the weak references to a weakly-reachable object are cleared, the object becomes eligible for finalization.
那么,弱引用在实现finalize
方法时是否可以保留堆中的对象?
与此同时,我找到了这个问题的答案,我设法删除了所有对我的类加载器的弱引用,除了两个:ClassLoaderLogManager.classLoaderLoggers
和与 tomcat 线程相关的那个。
注意:实际上,我设法删除了第一个,但此引用在取消部署之后/期间由 tomcat 再次设置。
编辑:PLUMBR 结果
我已经尝试过 plumbr,但在 Web 控制台上没有任何报告。标准输出上只有这条消息
Dumping heap to /opt/tomcat7/headdumps/java_pid9478.hprof ...
Heap dump file created [348373628 bytes in 3.984 secs]
#
# An unexpected error has been detected by Java Runtime Environment:
#
# Internal Error (javaCalls.cpp:40), pid=9478, tid=1117813056
# Error: guarantee(!thread->is_Compiler_thread(),"cannot make java calls from the compiler")
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.2-b01 mixed mode linux-amd64) [thread 1110444352 also had an error]
# An error report file with more information is saved as:
# [thread 1110444352 also had an error]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
******************************************************************************
* *
* Plumbr has noticed that JVM has thrown an OutOfMemoryError: PermGen space. *
* *
* You can increase PermGen size with -XX:MaxPermSize parameter. *
* If you encountered this error after a redeploy, please read next article: *
* http://plumbr.eu/blog/what-is-a-permgen-leak *
* *
******************************************************************************
最佳答案
我认为 Yourkit 将您引向了错误的道路。
我已经使用 Eclipse 内存分析器查看了您的堆转储。它表明,WebappClassLoader 被类 com.inovasoftware.iap.data.access.platform.datarepository.CoherenceDataRepository$$EnhancerByCGLIB$$180c0a4e 引用,该实例在某个线程局部变量中处于 Activity 状态。一些谷歌搜索显示: https://hibernate.atlassian.net/browse/HHH-2481
因此升级 Hibernate 版本可能会有帮助。
关于java - 即使没有 gc 根,WebappClassLoader 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19470328/
IntentReceiver 正在泄漏 由于 onDetachedFromWindow 在某些情况下未被调用。 @Override protected void onDetachedFromWind
好吧,我很难追踪这个内存泄漏。运行此脚本时,我没有看到任何内存泄漏,但我的 objectalloc 正在攀升。 Instruments 指向 CGBitmapContextCreateImage >
我编写了一个测试代码来检查如何使用 Instrument(Leaks)。我创建了一个单一 View 应用程序,单击按钮后我加载了一个像这样的新 View ... - (IBAction)btn_clk
我正在使用这个简单的代码并观察单调增加的内存使用量。我正在使用这个小模块将内容转储到磁盘。我观察到它发生在 unicode 字符串上而不是整数上,我做错了什么吗? 当我这样做时: >>> from u
我有以下泄漏的代码。 Instruments 表示,泄漏的是 rssParser 对象。我“刷新”了 XML 提要,它运行了该 block 并且发生了泄漏...... 文件.h @interface
我在我编写的以下代码片段中发现了内存泄漏 NSFileManager *fileManager=[[NSFileManager alloc] init]; fileList=[[fileManager
因此,我正在开发HTML5 / javascript rts游戏。观察一直有几种声音在播放。因此,对我来说,是一段时间后声音听起来像是“崩溃”,并且此浏览器选项卡上的所有声音都停止了工作。我只能通过重
下面是我正在使用的一段代码及其输出。 my $handle; my $enterCount = Devel::Leak::NoteSV($handle); print "$date entry $en
在这篇关于 go-routines 泄漏的帖子之后,https://www.ardanlabs.com/blog/2018/11/goroutine-leaks-the-forgotten-sende
我想知道为什么在执行 ./a.out 后随机得到以下结果。有什么想法我做错了吗?谢谢 http://img710.imageshack.us/img710/8708/trasht.png 最佳答案 正
我正在 Swift 中开发一个应用程序,在呈现捕获我放在一起的二维码的自定义 ViewController 后,我注意到出现了巨大的内存跳跃。 该代码本质上基于以下示例:http://www.appc
下面是我的 javascript 代码片段。它没有按预期运行,请帮我解决这个问题。 function getCurrentLocation() { console.log("insi
我们在生产环境中部署了 3 个代理 Kafka 0.10.1.0。有些应用程序嵌入了 Kafka Producer,它们将应用程序日志发送到某个主题。该主题有 10 个分区,复制因子为 3。 我们观察
我正在使用仪器来检测一些泄漏,但有一些泄漏我无法解决; NSMutableString *textedetails = [[NSMutableString alloc] init];
如果我使用性能工具测试我的代码 - 泄漏,它没有检测到任何泄漏。这是否意味着代码没有泄漏任何内存? 我有一个越狱的 iPhone,我可以监控可用内存。如果有人知道,那就是 SBSettings。我测试
我在从 AddressBook 中获取图像时遇到了很大的问题,下面我粘贴了我的代码。此 imageData 从未被释放,在我的 Allocations Instruments 上它看起来总是在内存中它
- (NSMutableArray *)getArrayValue:(NSArray *)array{ NSMutableArray *valueArray = [NSMutableArra
Instruments 工具说这是一个泄漏,有什么想法吗? 我在 for 循环结束时释放变量对象 在上述方法的开头,这就是我设置变量对象的方式,即自动释放; NSMutableArray *varia
我正在跟踪我的 iOS 应用程序的内存泄漏,我有一个奇怪的泄漏导致我的应用程序崩溃......负责的框架是:CGImageMergeXMPPropsWhithLegacyProps。在某些时候,我的应
我正在尝试使用 NSOperationQueue 在后台线程中执行一个方法,如下所示: NSOperationQueue *queue = [NSOperationQueue new]; NS
我是一名优秀的程序员,十分优秀!