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

Android应用程序内存堆持续增长

袁泰平
2023-03-14

我一直在我的应用程序中随机(内存溢出)崩溃,所以我开始分析我的堆。我注意到,如果我从活动A到活动B,堆会从27 MB增加到35 MB(由于懒惰加载许多图像)。但是,当我完成()活动B返回到活动A时,堆大小保持不变,即使使用GC操作!!

令人讨厌的是,再次进入活动B会将堆增加到42 MB。我可以这样做,因为五月的时候,堆只会不断增加。

这是我正在使用的惰性图像加载库:

LazyListhttps://github.com/thest1/LazyList

这些是堆的截图

之前:http://i.stack.imgur.com/7eTzm.png

之后:http://i.stack.imgur.com/txeC6.png

转换后的堆转储文件可根据要求提供

使现代化

从我的调试来看,它似乎是LazyList库中的问题,但我仍然不能100%确定。这里是人们评论图书馆的参考:

https://github.com/thest1/LazyList/issues/20

共有3个答案

龙才俊
2023-03-14

在我看来可能是你使用的图像。来自Android的BitmapFactory创建不可变的位图,因此您对这些位图所做的任何更改都将与原始图像分开。

更糟糕的是,即使你告诉它回收,它将取决于你的引用,如果它将被垃圾收集。

王俊哲
2023-03-14

在我看来,你每次都在开始一项新的活动,而不是切换到已经加载的活动。尝试将意图上的标志设置为包含意图。当您切换活动时,将活动重新排序到前面。

看到这个了吗

谷梁俊楚
2023-03-14

我猜您正在泄漏活动(可能会泄漏它所包含的所有变量)。确保要求您传递上下文的任何操作系统调用都已注销,没有任何对象包含对活动的引用(尤其是通过围绕上下文的引用),并且在onDestroy或onStop中可以将所有内容都清空(在所有主要对象中也要这样做)。

如果这还不够,请查看您的hprof,看看在您终止活动后,有哪些大型对象在周围,以及谁持有引用。修正并重复。

 类似资料:
  • 我在AWS ECS上的docker容器中运行了一个nodejs应用程序。随着通信量的增加,报告的内存像内存泄漏一样不断增长。交通越多,增长越快。但是,在检查了实例中的top和free-m的内存后,内存(rss)是稳定的,远低于docker的统计值。 在bash中的实例中,这里有来自cgroup的内存:rss+cache+swap非常接近的内存,也非常接近nodejs中的内存,但是离memory.u

  • 问题内容: 给定的:使用Android Studio向导创建的简单Activity, 内部没有任何自定义代码 ,会永久占用调用dumpGfxInfo()的内存。 Android Studio在Allocation Tracker中的构建至少揭示了 三个 相同的线程: 显然,dumpGfxInfo()通过为空字符串分配内存来消耗内存。编译中唯一相关的依赖项是 com.android.support:

  • 问题内容: 在我的组织中,我们有200多个Microsoft桌面和Web应用程序。我正在尝试为那些应用程序设置持续集成和持续部署(我已经为Java应用程序做过)。我们已经在企业Github,Jenkins,Nexus,XL- Deploy和XL- Release中使用了以下工具。我们还开发了Groovy的框架,该框架由Jenkins调用,并在Jenkins中分配了所有自动创建的工作,并将生成的工件

  • 我们正在使用一个3站点,每个站点3个节点的Cassandra 1.1.12集群,每个节点分配了8GB内存。我们定期在节点上看到长时间的GC暂停,这扰乱了我们的应用程序实时要求。我们运行的系统是8个核心系统,具有24GB内存。 我们已经看到了120秒的暂停,它会停止世界GC。 我们在JDK 1.7.0_04上运行这些标志 以下是导致长时间暂停的详细GC日志: 我还设置了一个夜间作业,强制GC在凌晨2

  • 好吧,我是Android Studio的新手,我在玩一个愚蠢的屁噪音应用程序。我的第一次尝试是一个按钮发出噪音。现在我有三个按钮,但应用程序无法在模拟器中打开。它只说应用程序一直在关闭。我试着用谷歌搜索log cat中的每一个错误,但到目前为止没有任何效果。我尝试了两个不同的模拟器,但最初它工作得很好,所以不确定要改变什么。声音文件是。我不确定这是否重要。 这是我的原木猫 04-10 11:41:

  • 我是否正确理解了客户端模式的文档? 客户端模式与驱动程序在应用程序主程序中运行的集群模式相反? 在客户端模式下,驱动程序和应用程序主程序是独立的进程,因此+必须小于计算机的内存? 在客户端模式下,驱动程序内存不包括在应用程序主内存设置中吗?