- 浏览: 43565 次
- 性别:
- 来自: 济南
文章分类
最新评论
五、不健壮代码的特征及解决办法
1、尽早释放无用对象的引用。好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露。
对于仍然有指针指向的实例,jvm就不会回收该资源,因为垃圾回收会将值为null的对象作为垃圾,提高GC回收机制效率;
2、我们的程序里不可避免大量使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域;
String str = "aaa";
String str2 = "bbb";
String str3 = str + str2;//假如执行此次之后str ,str2以后再不被调用,那它就会被放在内存中等待Java的gc去回收,程序内过多的出现这样的情况就会报上面的那个错误,建议在使用字符串时能使用StringBuffer就不要用String,这样可以省不少开销;
3、尽量少用静态变量,因为静态变量是全局的,GC不会回收的;
4、避免集中创建对象尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。
这是一个案例想定供大家警戒
使用jspsmartUpload作文件上传,运行过程中经常出现java.outofMemoryError的错误,
检查之后发现问题:组件里的代码
m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];
问题原因是totalBytes这个变量得到的数极大,导致该数组分配了很多内存空间,而且该数组不能及时释放。解决办法只能换一种更合适的办法,至少是不会引发outofMemoryError的方式解决。参考:http://bbs.xml.org.cn/blog/more.asp?name=hongrui&id=3747
5、尽量运用对象池技术以提高系统性能;生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。
6、不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃
7、一般都是发生在开启大型文件或跟数据库一次拿了太多的数据,造成 Out Of Memory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。
1、尽早释放无用对象的引用。好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露。
对于仍然有指针指向的实例,jvm就不会回收该资源,因为垃圾回收会将值为null的对象作为垃圾,提高GC回收机制效率;
2、我们的程序里不可避免大量使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域;
String str = "aaa";
String str2 = "bbb";
String str3 = str + str2;//假如执行此次之后str ,str2以后再不被调用,那它就会被放在内存中等待Java的gc去回收,程序内过多的出现这样的情况就会报上面的那个错误,建议在使用字符串时能使用StringBuffer就不要用String,这样可以省不少开销;
3、尽量少用静态变量,因为静态变量是全局的,GC不会回收的;
4、避免集中创建对象尤其是大对象,JVM会突然需要大量内存,这时必然会触发GC优化系统内存环境;显示的声明数组空间,而且申请数量还极大。
这是一个案例想定供大家警戒
使用jspsmartUpload作文件上传,运行过程中经常出现java.outofMemoryError的错误,
检查之后发现问题:组件里的代码
m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];
问题原因是totalBytes这个变量得到的数极大,导致该数组分配了很多内存空间,而且该数组不能及时释放。解决办法只能换一种更合适的办法,至少是不会引发outofMemoryError的方式解决。参考:http://bbs.xml.org.cn/blog/more.asp?name=hongrui&id=3747
5、尽量运用对象池技术以提高系统性能;生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。
6、不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃
7、一般都是发生在开启大型文件或跟数据库一次拿了太多的数据,造成 Out Of Memory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。
发表评论
-
jni使用总结
2012-12-10 12:52 01.framework/base/core/jni/ 文件分析 ... -
反编译重新打包
2014-04-29 15:19 4251.cmd执行:java -jar apktool.jar d ... -
Android应用程序跳转到系统的各个设置页面
2012-11-22 10:18 0在开发过程中,当我们的程序检测到某个功能项没打开或者没设置的时 ... -
中国天气网的中央气象台实时数据接口之管中窥豹
2012-10-16 15:03 0iPhone上的天气预报用的是Yahoo!数据,实在是闹不住, ... -
android 相对布局中的动态布局
2012-10-16 15:03 0mRlMain = (RelativeLayout) find ... -
Intent的Flag
2012-10-16 15:02 01. Intent it=new Intent(); 2. ... -
ActivityGroup 隐藏键盘失效在配置文件中
2012-10-16 15:02 0在activityGroup中 要添加 getWindow() ... -
android 属性注意事项
2012-10-16 15:02 0设置属性,ro.开头的属性将不能被更改属性值,persist. ... -
Dialog 样式
2012-11-15 19:33 702<style name="OverScan_C ... -
获取屏幕的真是宽高
2012-11-15 19:34 985Display display = getWindowMana ... -
android添加系统属性:Settings.system和SystemProperties
2012-10-16 15:01 0android源码开发中,常常要用到一些全局标志或者说变量,这 ... -
HttpPost HttpGET
2012-10-16 15:00 0String httpUrl = "http://5 ... -
android 内存回收原理
2012-11-15 19:33 8221. ActivityManagerService 集中管理所 ... -
Android网络编程之Http通信(cmwap处理)
2012-10-16 14:59 0需要Demo的可以直接下载来看看:http://downloa ... -
Activity切换动画(包括退出)
2012-10-16 14:59 0原来使用Activity.overridePendingTra ... -
Android focus处理
2012-10-16 14:58 0Handling Focus ... -
android 解析json数据格式
2012-10-16 14:58 0json数据格式解析我自己分为两种; 一种是普通的,一种是带 ... -
android 读取assets 目录下的资源方法
2012-10-16 14:57 01。获取资源的输入流 资源文件 sample.txt 位于 ... -
Fragment 一些异常问题
2012-10-16 14:57 0Caused by: java.lang.IllegalArg ... -
PrefernceActivity 自定义样式的方法
2012-10-16 14:57 01.首先在Activity当中设置 public class ...
相关推荐
根据胡凯在MDCC 2015中国移动开发者大会上的演讲内容,我们可以了解到他提出的“Android内存优化之5R法则”。 5R法则是对内存优化策略的高度概括,它涉及以下几个方面:Release(释放)、Reclaim(回收)、Reduce...
### Android内存泄露测试详解 在Android开发中,内存管理是一项至关重要的任务,不当的内存管理会导致应用运行缓慢、崩溃甚至耗尽系统资源。内存泄露是内存管理中的一个常见问题,它指的是应用程序分配了内存但未能...
**五、MAT与Android内存优化** MAT在Android开发中的应用主要是查找和修复内存泄漏,优化对象生命周期管理,减少内存占用,提升应用性能。开发者应定期进行内存分析,特别是在处理大量数据或长时间运行的应用中。 ...
>现修复android5.0以上不能查看进程的问题,暂时不能支持7.0的查看进程的功能,欢迎各位提出相应的意见或建议,如不能配置好环境,请下载安装包MemoryCleaner >由于对第一版的安卓手机内存用到的技术以及UI不满意,...
在Android平台上,优化应用以适应最低内存环境是提高应用程序性能和用户体验的关键步骤。...同时,文档“android 最低内存.doc”可能提供了更详细的技术指南和案例,建议仔细阅读以获取更多深入的知识。
例如,LeakCanary和MAT(Memory Analyzer Tool)都是常用的内存分析工具,它们可以帮助开发者定位潜在的问题,并提供改进建议。 总结来说,Android系统的内存分配涉及到多种算法和策略,如不同的内存分配算法、分代...
5. **文件操作注意事项**:为了保证文件操作的原子性,避免数据丢失,建议使用`FileChannel`的`transferFrom()`和`transferTo()`方法,或者使用`RandomAccessFile`进行大文件的读写。 四、SaveRead文件示例 在给定...
Android内存管理机制研究 Android内存管理机制是Android操作系统的核心组件之一,负责管理和分配移动设备的内存资源。Android内存管理机制研究是移动应用开发者和研究人员需要深入了解和掌握的知识领域。本文将深入...
#### 二、Android内存管理基础知识 在讨论内存泄露之前,我们需要了解一些基本概念。Android应用进程通常被分配一定量的RAM(例如:2MB到由`getMemoryClass()`或`getLargeMemoryClass()`返回的值),当内存不足时,...
"Android内存分析工具",尤其是Eclipse的MAT(Memory Analyzer Tool)插件,正是解决这类问题的重要利器。 MAT是IBM提供的一款强大的Java内存分析工具,它不仅适用于Android开发,也适用于任何基于Java的平台。MAT...
帧动画太多造成内存泄漏问题,内含所需的JAR包:org.apache.commons.io.IOUtils,将Inputstream转为byte字节数组,减少内存泄漏 和关键代码,仅供参考,如有建议请在下方留言或添加咨询~~~
Android内存优化是移动应用开发中一个至关重要的环节,特别是在资源受限的移动设备上。内存泄露是导致应用运行缓慢和最终崩溃的主要原因之一。以下将详细介绍Android开发中常见的内存泄露场景及优化方案。 首先,...
文档还针对512MB和1GB内存方案提出了不同的配置建议。 **Android配置**: 文档提供了一系列Android系统的配置,例如不同内存方案下的zramdisksize、dalvikheap参数设置等。这些配置对于优化Android系统在特定硬件...
在Android系统中,内存管理是至关重要的一个环节,特别是对于硬件资源有限的设备,如平板电脑。在Android 4.4(KitKat)系统中,内存的报告...对于新的Android版本,建议进行充分的测试和验证,以确保兼容性和可靠性。
总结来说,Android内存管理涉及对Java对象生命周期的理解,特别是对Bitmap的处理,以及如何避免内存泄漏。开发者应该养成良好的编程习惯,适时释放不再使用的资源,并利用Android提供的工具(如Memory Profiler)...
一些减少 App 内存占用的建议 内存管理概述 Android 运行时 (ART) 和 Dalvik 虚拟机使用分页和内存映射来管理内存。这意味着应用修改的任何内存,无论修改的方式是分配新对象还是轻触内存映射的页面,都会一直驻留在...
Android内存优化是提升应用性能的关键环节,主要分为两个方面:优化RAM(运行时内存)和优化ROM(程序存储空间)。本文主要关注降低运行时内存,防止应用程序出现OOM异常,减少因内存过大导致的程序被系统LMK(Low ...
在Android系统中,开发者可以创建悬浮窗来展示各种实时信息,如内存使用状态。这个功能在监测设备性能、优化应用运行或提供用户便利时非常有用。"android悬浮窗显示内存"是一个实现这样的功能的例子,它允许用户查看...
同时,可以结合业务需求,对这些数据进行分析,比如判断当前内存是否紧张,或者筛选出消耗内存较大的进程,提供清理建议。 4. 实时更新: 如果需要实时显示内存和进程数的变化,可以设置定时任务或者监听内存变化...
一、Android内存管理基础 在Android中,内存管理主要依赖于Dalvik或ART虚拟机,它们遵循Java的垃圾回收机制。当对象不再被引用时,垃圾回收器会自动清理这些内存。然而,强引用(Strong Reference)始终保持着对对象...