Android下怎么诊断/防止程序的内存泄漏/内存碎片,大家有没什么好方法

xqhrs232 2011-02-16 09:43:25
Android下怎么诊断/防止程序的内存泄漏/内存碎片,大家有没什么好方法
...全文
10297 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqhrs232 2012-05-25
  • 打赏
  • 举报
回复
我定制的系统运行越来越慢,原来存在吃内存的情况。监视可用内存是越来越少。


ActivityManager.MemoryInfo

public long availMem The total available memory on the system.
public boolean lowMemory Set to true if the system considers itself to currently be in a low memory situation.
public long threshold The threshold of availMem at which we consider memory to be low and start killing background services and other non-extraneous processes.


xqhrs232 2012-05-25
  • 打赏
  • 举报
回复
Android内存管理
http://tianhe945.blog.163.com/blog/static/2017531222012417134797/



6.Android框架,每一个进程都有内存限制,可以采用以下方法来躲开这个问题

每一个程序可以通过android.os.Debug.getNativeHeapAllocatedSize()查看进程可以使用的内存。

一种方法是从本机代码分配内存。使用NDK的(本地开发工具包)和JNI,它可以从C级(如的malloc / free或新/删除),这种分配的内存分配,不计入内存的限制。

另一种方法,效果很好,图像,是使用OpenGL纹理 - 纹理内存同样不被计入内存的限制

据说可以达到300M的内存使用,哪位朋友测试了可以告诉我,这个方法的可行性。



xqhrs232 2012-05-25
  • 打赏
  • 举报
回复
zy1235678 2012-03-09
  • 打赏
  • 举报
回复
收藏了,这个真的很有用!
w237or45 2012-03-09
  • 打赏
  • 举报
回复
主要是bitmap 容易内存溢出 这是我的解决方案

http://blog.csdn.net/w237or45/article/details/7333782
OtherEyeOpen 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 hawkofwinter 的回复:]
Java内存也泄露?
[/Quote]

确切地说是加速回收,防止溢出。因为android限定app使用大小。
leer168 2011-09-15
  • 打赏
  • 举报
回复
Mark
Quannenggou 2011-08-02
  • 打赏
  • 举报
回复
http://wenku.baidu.com/view/bf788a02b52acfc789ebc9c4.html
xx 2011-08-02
  • 打赏
  • 举报
回复
我想说,LZ的本意很好,但是这种排版,一般人看不起来。。。
中才德创 2011-07-31
  • 打赏
  • 举报
回复
有没简单的监控内存泄露的工具?
中才德创 2011-07-31
  • 打赏
  • 举报
回复
Java内存也泄露?
  • 打赏
  • 举报
回复
太好了,总结的很全!!
loozlv 2011-07-22
  • 打赏
  • 举报
回复
很好的帖子,帮顶
pengzhenwanli 2011-03-04
  • 打赏
  • 举报
回复
我最近也在查这个问题,MAT不是很好用。有些引用找不到是谁的。
不知道还有没有更好的方法
qthsrs232 2011-02-16
  • 打赏
  • 举报
回复
有效解决android加载大图片内存泄露的问题

http://zhiweiofli.javaeye.com/blog/905066
qthsrs232 2011-02-16
  • 打赏
  • 举报
回复
解决Gallery载入大图片导致OutOfMemoryError内存溢出问题
http://www.pocketdigi.com/20101029/138.html


在使用Gallery控件时,如果载入的图片过多,过大,就很容易出现OutOfMemoryError异常,就是内存溢出。这是因为Android默认分配的内存只有8M,而载入的图片如果是JPG之类的压缩格式,在内存中展开时就会占用大量的空间,也就容易内存溢出。这时可以用下面的方法解决:

1
2
3
4
5
6
7
8
9
10
ImageView i = new ImageView(mContext);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 10;
//貌似这个options的功能是返回缩略图,10即表示长和宽为原来的1/10,即面积为原来的1/100
//缩略图可以减少内存占用
Bitmap bm = BitmapFactory.decodeFile(lis.
get(position).toString(),options);
i.setImageBitmap(bm);
bm.recycle();
//资源回收

xqhrs232 2011-02-16
  • 打赏
  • 举报
回复
xqhrs232 2011-02-16
  • 打赏
  • 举报
回复
android 加载图片 内存溢出的问题



我的代码如下

is = new FileInputStream(new File(baseMagazinePath + this.bookId + "/" + fileList[currentImgNo] + ".png"));
iv.setImageDrawable(Drawable.createFromStream(is, "myStream"));

有时候出现内存溢出

改为
is = new FileInputStream(new File(baseMagazinePath + this.bookId + "/" + fileList[currentImgNo] + ".png"));
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeStream(is, null, opts);
iv.setImageBitmap(bitmap);

就好了。

xqhrs232 2011-02-16
  • 打赏
  • 举报
回复
android显示图片内存溢出问题
http://d.187000.com/d_android_tupian_neicun_wenti.html

最近在做一个应用,要循环显示图片,可是图片很大,每个5M左右,如果按图片原来大小显示,在显示两个图片之后必会内存溢出,谁能给个图片压缩显示方法,谢谢!!!
--------------------------------------------------------------------------------

以下为可能性最大的答案:
........5M
这个就算recycle也没用了...
我觉得你可以这样,创建一张全局的bitmap(当然要按最大的创建),然后每个图片读取都按照字节的方式读出来,之后set个体这个全局的bitmap,显示的时候就显示这个全局的,一个用完就清空一下,在读取另一张,这样保证只有一个bitmap在占用内存....
--------------------------------------------------------------------------------
recycle并不能及时回收图片,只是告诉虚拟机我需要回收该图片资源,Java中没有手工回收资源的方法。。
1、修改android底层的内存限制。。。放开内存
2、用楼上的做法进行缩放, opts.inSampleSize = 2;表明缩放为原图的长宽各一半。。。用弱引用引用图片,保证及时的回收。。


--------------------------------------------------------------------------------
执行了bitmap.recycle()后,直接让bitmap对象赋予null,这样可以立即释放的。不过要说的是android处理大图片很愁人的,ram太小了,没办法,vm限制也大,哈哈
qthsrs232 2011-02-16
  • 打赏
  • 举报
回复
J2ME中的内存泄漏问题

http://blog.sina.com.cn/s/blog_4b8ab89701009n5k.html


J2ME中最常使用的资源无非是图片和声音。为了提高游戏的运行速度,我们通常把它们声明为全局变量,又由于手机的内存的关系,我们不能把这些资源同时加载进内存,所以我们会在使用的时候导入资源(创建对象),而把暂时不需要的资源(图片或声音)对象赋值为null(当然这是我的做法,不知道是否和大家一样)。在这期间如果处理不好,就会有些资源对象的在内存中没有清除干净,就会造成内存泄漏,结果就是可用内存越来越小。下面我就举例说明。
?n u M+|$c;t5j0  Android J2ME u(U@1| u%FIz-a!B
  1.图片资源Android J2ME ` V(B;b d2KU
  要点:要为每一个图片资源声明一个对象变量
x sZ7L�ts[3E~2m0  假设在一个程序声明了2个图片对象:
8j;db7S!S ^.BV�l0      Image pic1,pic2;
os&E+Q\"M#B6x0  如果在某一时刻要使用pic1和pic2则:
/T ov3x0u){ l0      if(pic1==null)pic1=Image.createImage("/1.png");Android J2ME !dk3n[D$J!@#Q
      if(pic2==null)pic2=Image.createImage("/2.png");Android J2ME )S'O�e0p3l{'S#L
  当这些图片用完后,就应当:
(b{6wQU3u0      pic1=null;
.iWl3R,~%d0      pic2=null;
%A7o VR+m@H0  如果需要使用另外两个图片3.png和4.png,则最好另声明两个变量对象pic3,pic4来导入它们,不要使用pic1,pic2变量来导入这两个图片,如:Android J2ME (oQ @,m_
      if(pic1==null)pic1=Image.createImage("/3.png");//不要这样做Android J2ME "vI"b9UJm s
      if(pic2==null)pic2=Image.createImage("/4.png");//不要这样做Android J2ME 3_*L\ eFEl__
  因为这样做会影响垃圾收集器对pic1,pic2对象的回收工作,从而造成内存回收不干净。
.q8lz-[(lj0  Android J2ME ;]G*D4m:Bh\.@_
  2.声音资源(不同的平台对声音的处理方式不同)Android J2ME m8H2C QK@B
  Android J2ME /I{(j]@
  要点:和图片资源一样,另外在回收声音资源一定要停止声音的播放;还有在每次开始播放声音前,也要先判断一下声音的状态(简单点,直接调用stop,先让声音停下来,然后再播放),如果不先停止声音的播放,再调用其运行播放,可能会生成无法回收的对象(这是本人猜测的)造成内存的泄漏。
r o,OSS0  
&YP;k6Z0H i0  如:
+d{K[jFcB0  假设sound为声音对象jAndroid J2ME 3V.}4KTw1F!j+h�L.q!R%KN
  释放sound资源:
9d8J6HY Ne$s{D4K;I0       if(sound!=null)
!V]S0X.m#}3c#f0       {Android J2ME :O6C$L c
加载更多回复(21)
内容概要:本文档围绕“四杆机构分析”展开,介绍了一种基于给定系统几何参数执行四杆机构运动学分析的研究方法,并提供了完整的Matlab代码实现。四杆机构作为机械系统中的经典【四杆机构分析】根据给定的系统几何参数执行四杆机构分析研究(Matlab代码实现)连杆机构,其运动特性分析在自动化、机器人、车辆工程等领域具有重要应用价值。文档内容涵盖机构的位置、速度和加速度分析,通过矢量闭环法建立数学模型,利用Matlab进行数值计算与可视化仿真,帮助用户理解机构的运动规律。此外,文档还展示了代码的模块化结构,便于扩展至其他连杆机构分析。; 适合人群:具备一定Matlab编程基础和机械原理知识的本科高年级学生、研究生及从事机械系统仿真与设计的工程技术人员。; 使用场景及目标:①掌握四杆机构的运动学建模方法;②学习如何使用Matlab实现机构的位姿分析与动态仿真;③为后续复杂机构设计与机器人运动学研究打下基础;④适用于课程设计、科研项目或工程验证中的机构分析任务。; 阅读建议:建议读者结合机械原理教材中的四杆机构理论,逐步调试Matlab代码,观察各参数变化对机构运动的影响,并尝试修改几何参数或扩展至多连杆系统,以加深对运动学分析的理解。
内容概要:本文介绍了一个基于多传感器融合的定位系统设计方案,采用GPS、里程计和电子罗盘作为定位传感器,利用扩展卡尔曼滤波(EKF)算法对多源传感器数据进行融合处理,最终输出目标的滤波后位置信息,并提供了完整的Matlab代码实现。该方法有效提升了定位精度与稳定性,尤其适用于存在单一传感器误差或信号丢失的复杂环境,如自动驾驶、移动采用GPS、里程计和电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置(Matlab代码实现)机器人导航等领域。文中详细阐述了各传感器的数据建模方式、状态转移与观测方程构建,以及EKF算法的具体实现步骤,具有较强的工程实践价值。; 适合人群:具备一定Matlab编程基础,熟悉传感器原理和滤波算法的高校研究生、科研人员及从事自动驾驶、机器人导航等相关领域的工程技术人员。; 使用场景及目标:①学习和掌握多传感器融合的基本理论与实现方法;②应用于移动机器人、无人车、无人机等系统的高精度定位与导航开发;③作为EKF算法在实际工程中应用的教学案例或项目参考; 阅读建议:建议读者结合Matlab代码逐行理解算法实现过程,重点关注状态预测与观测更新模块的设计逻辑,可尝试引入真实传感器数据或仿真噪声环境以验证算法鲁棒性,并进一步拓展至UKF、PF等更高级滤波算法的研究与对比。
内容概要:文章围绕智能汽车新一代传感器的发展趋势,重点阐述了BEV(鸟瞰图视角)端到端感知融合架构如何成为智能驾驶感知系统的新范式。传统后融合与前融合方案因信息丢失或算力需求过高难以满足高阶智驾需求,而基于Transformer的BEV融合方案通过统一坐标系下的多源传感器特征融合,在保证感知精度的同时兼顾算力可行性,显著提升复杂场景下的鲁棒性与系统可靠性。此外,文章指出BEV模型落地面临大算力依赖与高数据成本的挑战,提出“数据采集-模型训练-算法迭代-数据反哺”的高效数据闭环体系,通过自动化标注与长尾数据反馈实现算法持续进化,降低对人工标注的依赖,提升数据利用效率。典型企业案例进一步验证了该路径的技术可行性与经济价值。; 适合人群:从事汽车电子、智能驾驶感知算法研发的工程师,以及关注自动驾驶技术趋势的产品经理和技术管理者;具备一定自动驾驶基础知识,希望深入了解BEV架构与数据闭环机制的专业人士。; 使用场景及目标:①理解BEV+Transformer为何成为当前感知融合的主流技术路线;②掌握数据闭环在BEV模型迭代中的关键作用及其工程实现逻辑;③为智能驾驶系统架构设计、传感器选型与算法优化提供决策参考; 阅读建议:本文侧重技术趋势分析与系统级思考,建议结合实际项目背景阅读,重点关注BEV融合逻辑与数据闭环构建方法,并可延伸研究相关企业在舱泊一体等场景的应用实践。

80,475

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧