"-6ren"> "-我正在编写一个小型单 Activity android 应用程序并遇到内存泄漏错误,因为我无法找到起源。首先,该应用程序计算基本内容并以结构化方式显示结果。计算很简单,虽然有一些图像,但它们大约有 5-6ren">
gpt4 book ai didi

java - Android 内存泄漏,EMA 疑似 : "byte[]" loaded by ""

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:00 33 4
gpt4 key购买 nike

我正在编写一个小型单 Activity android 应用程序并遇到内存泄漏错误,因为我无法找到起源。首先,该应用程序计算基本内容并以结构化方式显示结果。计算很简单,虽然有一些图像,但它们大约有 50 个图标,总共不到 4MB。

我已经安装了 Eclipse Memory Analyzer 并用它检查了堆转储,Leak Suspects Report 说:

问题怀疑一:477 个“byte[]”实例,由 加载,占用 78.116.240 (76,46%) 字节。

支配树

我既不知道那些字节数组可能是什么,也看不到 GC 根或任何东西,因为这些数组在支配树中没有父代。我不经常为 Android 编程,我拼命想弄清楚,从今天开始这里发生了什么。当我使用该应用程序并观察 ADM 中的堆大小/使用百分比时,我直接从 80% 的使用率开始,并且随着使用量的增加而变大。 (还显示 1 字节数组 (byte[], boolean[])) 直到应用程序在 AVD 上崩溃,我的真实设备可以处理它更长的时间。我知道我可以使尺寸更大,但这对我来说不是解决方案,因为我认为我从一开始就遇到了这个问题,现在它刚刚达到临界点。

最佳答案

转到直方图 View :直方图 View 显示可按实例数、浅堆(所有实例使用的内存总量)或保留堆(由所有实例,包括它们引用的其他对象)。

右键单击 byte[] 类并选择 List Objects > with incoming references。这会生成堆中所有字节数组的列表,您可以根据浅堆使用情况对其进行排序。

选择一个大对象,然后向下钻取。这将向您显示从根集到对象的路径——使该对象保持 Activity 状态的引用链。在下面的例子中,位图缓存是罪魁祸首

enter image description here

边注从 Android 3.0 (Honeycomb) 开始,Bitmap 对象的像素数据存储在字节数组中(以前它不存储在 Dalvik 堆中)

关于java - Android 内存泄漏,EMA 疑似 : "byte[]" loaded by "<system class loader>",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35943431/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com