Questions tagged «memory-leaks»

当程序无法释放其已分配但不再使用且不可恢复的内存时,就会发生内存泄漏。

4
如何在objc_exception_throw中添加断点?
这是从这个布拉德·拉尔森的答案 SO问题 如果添加两个断点,则应该能够调试这些异常。为此,请转到“运行”。显示 断点并创建两个全局断点(我将它们全局化是因为它们在我的所有应用程序中都非常有用)。第一个应命名为“ objc_exception_throw”,其位置应为“ libobjc.A.dylib”。第二个应为“-[NSException提高]”,其位置应为“ CoreFoundation”。 现在,如果您在启用断点的情况下开始调试应用程序,则应在抛出这些异常时中断它。然后,您应该能够看到导致调试器中发生异常的事件链。 现在在此答案中,我想问一下如何添加提到的位置???

7
跟踪Java中的内存泄漏/垃圾回收问题
这是我几个月来一直试图寻找的问题。我有一个正在运行的Java应用程序,该应用程序处理xml提要并将结果存储在数据库中。存在间歇性的资源问题,很难追踪。 背景: 在生产包装盒(问题最明显的地方)上,我对包装盒的访问不是特别好,并且无法使Jprofiler运行。那个盒子是运行centos 5.2,tomcat6和java 1.6.0.11的64位四核8gb机器。它以这些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 休眠3 石英1.6.1 DBCP 1.2.1 的MySQL 5.0.45 高速缓存1.5.0 (当然还有许多其他依赖项,特别是jakarta-commons库) 我最能重现该问题的是内存需求较低的32位计算机。我确实可以控制。我已经使用JProfiler对其进行了探究,并修复了许多性能问题(同步问题,预编译/缓存xpath查询,减少线程池,删除不必要的休眠预取以及处理过程中过度的“缓存变暖”)。 在每种情况下,探查器都显示这些资源由于某种原因占用了大量资源,并且一旦进行更改,这些资源就不再是主要的资源消耗。 问题: JVM似乎完全忽略了内存使用设置,填满了所有内存并且变得无响应。这对于面对最终客户的客户来说是个问题,他们希望定期进行轮询(每5分钟一次,然后重试1分钟),对于我们的运营团队来说,这是不断得到通知的,盒子已变得没有响应,必须重新启动它。此框上没有其他可运行的东西。 问题似乎是垃圾回收。我们使用ConcurrentMarkSweep(如上所述)收集器是因为原始的STW收集器导致JDBC超时并变得越来越慢。日志显示,随着内存使用量的增加,即开始引发cms故障,并踢回原始的世界停止收集器,然后该收集器似乎未正确收集。 但是,使用jprofiler运行时,“运行GC”按钮似乎可以很好地清理内存,而不是显示增加的占用空间,但是由于我无法将jprofiler直接连接到生产盒,并且无法解决已证明的热点问题,因此我正在使用剩下的是将Garbage Collection调为盲人的巫毒教。 我试过的 分析和修复热点。 使用STW,Parallel和CMS垃圾收集器。 以最小/最大堆大小以1 / 2、2 / 4、4 / …

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

8
SQLite Android数据库游标窗口分配2048 kb失败
我有一个例程,每秒对SQLite数据库运行多次不同的查询。过一会儿我会得到错误 "android.database.CursorWindowAllocationException: - Cursor window allocation of 2048 kb failed. # Open Cursors = " 出现在LogCat中。 我有应用日志内存的使用情况,确实,当使用情况达到一定限制时,我会收到此错误,暗示它用完了。我的直觉告诉我,每次运行查询时,数据库引擎都会创建一个NEW缓冲区(CursorWindow),即使我将游标标记为.close(),垃圾回收器和SQLiteDatabase.releaseMemory()释放内存的速度够快。我认为解决方案可能在于“强制”数据库始终写入同一缓冲区,而不创建新缓冲区,但是我一直无法找到一种方法来做到这一点。我尝试实例化自己的CursorWindow,并尝试将其设置为和SQLiteCursor无济于事。 有任何想法吗? 编辑:从@GrahamBorland重新示例代码请求: public static CursorWindow cursorWindow = new CursorWindow("cursorWindow"); public static SQLiteCursor sqlCursor; public static void getItemsVisibleArea(GeoPoint mapCenter, int latSpan, int lonSpan) { query = "SELECT * FROM Items"; //would be more complex …

6
WKWebView导致我的视​​图控制器泄漏
我的视图控制器显示一个WKWebView。我安装了消息处理程序,这是一个很酷的Web Kit功能,该功能使您可以从网页内部通知我的代码: 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 } 看来,仅仅将自己安装为消息处理程序会导致保留周期并因此导致泄漏!


4
如何使用转储文件诊断内存泄漏?
我有一个.NET服务,其正常的私有工作集约为80 MB。在最近的负载测试中,该过程达到3.5 GB的内存使用量,导致整台计算机的物理内存不足(已使用4 GB的3.9),并且在负载测试停止后很长时间没有释放内存。使用任务管理器,我获取了该过程的转储文件,并在Visual Studio 2010 SP1中将其打开,然后就可以开始对其进行调试了。 如何诊断内存问题?我可以使用dotTrace Memory 3.x,它是否支持对转储文件进行内存分析?如果没有,Visual Studio 2010 Premium的内存配置功能是否会有所帮助(我目前拥有专业版)?WinDbg可以提供帮助吗? 更新:新的Visual Studio 2013 Ultimate现在可以使用转储文件本地诊断内存问题。有关更多详细信息,请参见此博客文章。

8
android活动已泄漏窗口com.android.internal.policy.impl.phonewindow $ decorview问题
我正在使用Android应用程序来显示网络错误。 NetErrorPage.java package exp.app; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class NetErrorPage extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.neterrorlayout); Button reload=(Button)findViewById(R.id.btnReload); reload.setOnClickListener(this); showInfoMessageDialog("Please check your …

4
取消部署Tomcat Web应用程序时如何防止文件锁定?
我正在使用tomcat 7中的管理器应用程序,但无法完全取消部署应用程序。 它说 FAIL - Unable to delete [F:\apache-tomcat-7.0.33\webapps\balaji]. The continued presence of this file may cause problems. 我在某处读到它是因为某种称为内存泄漏的现象,如果我们修复它,该问题将得到解决。 谁能告诉我tomcat 7中的内存泄漏是什么,我们该如何解决?我正在使用Windows 7 OS。如果我能够解决它,我的取消部署和重新部署过程是否会顺利进行?

1
Navigation Arch Component会造成假阳性内存泄漏吗?
我对内存泄漏以及可能导致它们的原因有基本的了解。这就是为什么我不明白我的代码中是否有问题还是误报的原因。我不知道我应该共享代码的哪一部分,因为该项目并不小。但是,请在评论中让我知道,然后我将添加所需的代码。 我使用导航拱形组件并遵循MVVM模式。我在项目开发的后期添加了LeakCanary库,当我在屏幕之间导航时,它立即开始向我发出有关保留实例的警告。 当我将片段添加到后堆栈时,会发生问题。随着向后堆栈中添加的每个片段,保留实例的计数器增加。当达到阈值5时,LeakCanary将转储堆并提供报告。 但是,如果我单击“后退”按钮并返回到先前的屏幕,则保留实例的计数器减少,最终,当返回到第一个屏幕时,所有保留的实例都会消失。 如果我查看堆分析报告,它表示变量coordinatorLayout是CoordinatorLayoutxml中的引用。如果删除该变量及其所有用法,然后再次运行该应用程序,我会看到相同的问题,但是现在有了另一个变量,该变量引用了xml中的另一个视图。我试图删除LeakCanary报告为泄漏的所有视图及其用法。当它说a TextView只是用于设置文本onViewCreated而不在其他地方使用时,正在泄漏,我开始怀疑我的代码是否有问题。 我分析了片段中的生命周期方法调用,并注意到当我导航到先前片段的新屏幕时,直到(包括)所有方法onDestroyView都被调用,但没有被调用onDestroy。当我单击返回时,onDestroy将调用位于后堆栈顶部和保留实例顶部的片段,计数器会减少。 我怀疑导航组件在返回堆栈中时会保留片段的实例,而LeakCanary却将其视为泄漏。

1
1 MB或更大的Java字节数组占用RAM的两倍
在Windows 10 / OpenJDK 11.0.4_x64上运行下面的代码会作为输出used: 197和输出expected usage: 200。这意味着200个字节数组(一百万个元素)占用了大约。200MB RAM。一切都很好。 当我将代码中的字节数组分配从new byte[1000000]更改为new byte[1048576](即更改为1024 * 1024个元素)时,它会作为输出used: 417和产生expected usage: 200。有没有搞错? import java.io.IOException; import java.util.ArrayList; public class Mem { private static Runtime rt = Runtime.getRuntime(); private static long free() { return rt.maxMemory() - rt.totalMemory() + rt.freeMemory(); } public static void main(String[] args) throws InterruptedException, …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.