当前位置: 首页 > 知识库问答 >
问题:

陷入无限循环的日志:背景部分/粘性并发标记扫描GC

柳奇思
2023-03-14

我正在创建一个应用程序(不在play store中),它在Webview中使用了大量内存,通过使用LeakCanary,我发现了一个修复了几个小内存泄漏的问题。有两个漏洞比其他漏洞更难修复,但也比任何其他漏洞小得多(每两个小时泄漏10-12kb),我不得不暂时保留它们。在让我的应用程序运行一整晚后,我通常会看到大量的日志,比如:

背景部分并发标记扫描GC释放263432(17MB)AllocSpace对象,0(0B)LOS对象,26%空闲,44MB/60MB,暂停13.441ms总计226.525ms

背景粘性并发标记扫描GC释放145187(13MB)AllocSpace对象,0(0B)LOS对象,22%空闲,46MB/60MB,暂停12.864ms总计164.097ms

背景部分并发标记扫描GC释放265421(17MB)AllocSpace对象,0(0B)LOS对象,26%空闲,44MB/60MB,暂停13.632ms总计230.849ms

背景粘性并发标记扫描GC释放147514(14MB)AllocSpace对象,0(0B)LOS对象,22%自由,46MB/60MB,暂停13.037ms总计167.625ms

这些日志无休止地重复,每2秒一次,导致应用程序冻结,直到我关闭应用程序并重新启动。

在我的清单上我加了

android:largeHeap="true"

因为我的应用程序需要连续运行(基本上是永远运行),所以我每天早上1点安装了一个闹钟来关闭应用程序,并在一个干净的环境中重新启动。这不是一个最佳实践,但它确实是一个很好的集合,可以解决由于应用程序寿命异常长而出现的任何错误。

一两个小内存泄漏真的会造成这么大的损失吗?还有什么会导致这些日志重复这么多?我该怎么修?

共有1个答案

缑修齐
2023-03-14

我认为那些日志是因为泄漏金丝雀的实现而存在的。禁用泄漏金丝雀,你就不会再看到那些日志了。

 类似资料:
  • 正如使用boto3完全扫描dynamoDb中所解释的,我构建了一个解决方案,使用某些条件完全扫描dynamoDb表。这是我的代码: 但是当代码被执行时,它会进入一个无限循环。这是LastEvaluatedKey每次迭代的输出: 它一直在这两对之间循环。 编辑: 我添加了do_scan方法。

  • 我正在尝试编写使用Scanner类从用户那里获取输入的代码。但是hasNext()、hasNextInt()和hasNextLine()每次都会运行无限循环。

  • 问题内容: 我是AngularJS的新手,我正在构建一个示例应用程序。我想在网页上显示Google Maps响应的结果。在这里,我传递了示例值,但是页面进入循环并给出此错误: 这是HTML页面: 问题答案: 在插值内调用函数时,请务必小心。插值会在 每个摘要循环中 运行,并且您在其中调用一个函数,一切都很好,但是随后在该函数中进行一次调用,该调用再次 触发摘要循环(在解析/拒绝和每个promise

  • 问题内容: 我希望代码在后台运行并定期更新我的GUI。我该怎么做? 例如,假设我想在GUI代码的背景中执行以下操作,如下所示: 这是GUI代码: 问题答案: 尚不清楚顶部的代码应该做什么,但是,如果只想每秒(或每秒钟)调用一个函数,则可以使用该方法。 因此,如果您只想使用进行操作,则可能需要执行以下操作: 您可以将此函数作为您类的方法(在本例中称为),您的代码将如下所示:

  • 问题内容: boolean z = false; do { try { a = sc.nextInt(); z = true; } catch(Exception e) { } } while(!z); 试试这个。如果您第一次尝试整数,则整数将正确执行。但是,如果您输入错误的文本类型,即使您接下来输入int并跳过将布尔值分配为true的情况,也会变成无限循环。为什么是这样? 问题答案: 您的问题出

  • 我想让用户输入一个String和四个整数值,如果用户输入的类型不匹配,我想让程序继续要求用户输入整数值,为什么代码会一直循环,如果用户插入了错误的类型,永远不会等待用户输入?