当前位置:文档之家› Handler内存泄漏解决

Handler内存泄漏解决

Handler内存泄漏解决
Handler内存泄漏解决

什么是内存泄露?

Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达,同样会被GC回收。

Handler造成内存泄露的原因

Handler mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

mImageView.setImageBitmap(mBitmap);

}

}

上面是一段简单的Handler的使用。当使用内部类(包括匿名类)来创建Handler的时候,Handler对象会隐式地持有一个外部类对象(通常是一个Activity)的引用(不然你怎么可能通过Handler来操作Activity中的View?)。而Handler通常会伴随着一个耗时的后台线程(例如从网络拉取图片)一起出现,这个后台线程在任务执行完毕(例如图片下载完毕)之后,通过消息机制通知Handler,然后Handler把图片更新到界面。然而,如果用户在网络请求过程中关闭了Activity,正常情况下,Activity不再被使用,它就有可能在GC检查时被回收掉,但由于这时线程尚未执行完,而该线程持有Handler的引用(不然它怎么发消息给Handler?),这个Handler又持有Activity的引用,就导致该Activity无法被回收(即内存泄露),直到网络请求结束(例如图片下载完毕)。另外,如果你执行了Handler的postDelayed()方法,该方法会将你的Handler装入一个Message,并把这条Message推到MessageQueue中,那么在你设定的delay到达之前,会有一条MessageQueue -> Message -> Handler -> Activity的链,导致你的Activity被持有引用而无法被回收。

内存泄露的危害

只有一个,那就是虚拟机占用内存过高,导致OOM(内存溢出),程序出错。对于Android 应用来说,就是你的用户打开一个Activity,使用完之后关闭它,内存泄露;又打开,又关闭,又泄露;几次之后,程序占用内存超过系统限制,FC。

使用Handler导致内存泄露的解决方法

方法一:通过程序逻辑来进行保护。

1.在关闭Activity的时候停掉你的后台线程。线程停掉了,就相当于切断了Handler和外部连接的线,Activity自然会在合适的时候被回收。

2.如果你的Handler是被delay的Message持有了引用,那么使用相应的Handler的removeCallbacks()方法,把消息对象从消息队列移除就行了。

方法二:将Handler声明为静态类。

静态类不持有外部类的对象,所以你的Activity可以随意被回收。代码如下:

static class MyHandler extends Handler {

@Override

public void handleMessage(Message msg) {

mImageView.setImageBitmap(mBitmap);

}

}

但其实没这么简单。使用了以上代码之后,你会发现,由于Handler不再持有外部类对象的引用,导致程序不允许你在Handler中操作Activity中的对象了。所以你需要在Handler中增加一个对Activity的弱引用(WeakReference):

static class MyHandler extends Handler {

WeakReference mActivityReference;

MyHandler(Activity activity) {

mActivityReference= new WeakReference(activity);

}

@Override

public void handleMessage(Message msg) {

final Activity activity = mActivityReference.get();

if (activity != null) {

mImageView.setImageBitmap(mBitmap);

}

}

}

将代码改为以上形式之后,就算完成了。

延伸:什么是WeakReference?

WeakReference弱引用,与强引用(即我们常说的引用)相对,它的特点是,GC在回收时会忽略掉弱引用,即就算有弱引用指向某对象,但只要该对象没有被强引用指向(实际上多数时候还要求没有软引用,但此处软引用的概念可以忽略),该对象就会在被GC检查到时回收掉。对于上面的代码,用户在关闭Activity之后,就算后台线程还没结束,但由于仅有一条来自Handler的弱引用指向Activity,所以GC仍然会在检查的时候把Activity回收掉。这样,内存泄露的问题就不会出现了。

android避免内存泄露

1、数据库的cursor没有关闭 2、构造adapter没有使用缓存contentview 衍生的listview优化问题:减少创建View的对象,充分使用contentview,可以使用静态类来处理优化getView的过程 3、Bitmap对象不使用时采用recycle()释放内存 4、Activity中的对象生命周期大于Activity 调式方法:DDMS->HEAPSIZE->adtaobject->total size Android应用程序被限制在16MB的堆上运行,至少在T-Mobile G1上是这样。对于手机来说,这是很大的内存了;但对于一些开发人员来说,这算是较小的了。即使你不打算使用掉所有的内存,但是,你也应该尽可能少地使用内存,来确保其它应用程序得以运行。Android在内存中保留更多的应用程序,对于用户来说,程序间切换就能更快。作为我(英文作者)工作的一部分,我调查了Android应用程序的内存泄露问题,并发现这些内存泄露大多数都是由于相同的错误导致的,即:对Context拥有较长时间的引用。 在Android上,Context常用于许多操作,更多的时候是加载和访问资源。这就是为什么所有的Widget在它们的构造函数里接受一个Context的参数。在一个正常的Android应用程序里,你会看到两种Context类型,Activity和Application。而一般在需要一个Context的类和方法里,往往传入的是第一种: Java代码 @Override protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText("Leaks are bad");

2019年电脑内存不足怎样清理

2019年电脑内存不足怎样清理 篇一:计算机内存不足怎么办 计算机存储器不足怎么办 一、重新启动计算机 重新启动计算机,充分释放系统资源再使用。 二、查杀病毒 系统感染计算机病毒也是导致存储器不足的罪魁祸首,使用最新的杀毒软件查杀病毒,或许在清除计算机病毒之后,就解决了“存储器不足”的问题。 三、减轻存储器负担 1、打开的程序不可太多。如果同时打开的文档过多或者运行的程序过多,就没有足够的存储器运行其他程序,要随时关闭不用的程序和窗口。

2、自动运行的程序不可太多。单击“开始”,然后单击“运行”,,键入“Msconfig”,单击“确定”按钮,打开“系统配置实用程序”窗口,删除不想自动加载的启动组项目。 3、关闭多余程序 如果同时打开的文档过多或者运行的程序过多,就没有韩毅 足够的存储器运行其他程序。对于多文档界面程序,如Word、Excel 等,关闭当前文档外的所有文档,并退出当前未使用的程序,或许你就能够继续执行因“存储器不足”而被中断的任务。 4、清除剪贴板中的内容 四、增加可用磁盘空间 1.清空回收站。 2.删除临时档。在“我的计算机”窗口,右键单击要释放其空间的磁盘,然后单击“属性”,在“常规”选项卡上,单击“磁盘清理”按钮,选中要删除的不需要的档前的复选框进行整理。

3.从磁盘中删除过期的档或已存档的档。 4.删除从未使用过的档。 五、加大物理存储器,合理设置虚拟存储器 1、使用默认虚拟存储器,右键单击“我的计算机”→属性→高级→性能设置→高级→虚拟存储器更改→选择虚拟存储器(页面档)存放的分区→选中“让Windows管理虚拟存储器设置-(推荐)”→设置→确定。 2、自定义虚拟存储器,最好给它一个固定值,这样就 不容易产生磁盘碎片,具体数值根据你的物理存储器大小来定,一般是128MB物理存储器设2-3倍,256MB设1.5-2倍,512MB设1—1.5倍,1GB设0.5倍或设为自动。 3、具体步骤如下:右键单击“我的计算机”→属性→高级→性能设置→高级→虚拟存储器更改→选择虚拟存储器(页面档)存放的分区→自定义大小→确定最大值和最小值→设置→确定。

Android开发规范参考文档

Android开发参考文档 一、Android编码规范 1. java代码中不出现中文,最多注释中可以出现中文.xml代码中注释 2. 成员变量,局部变量、静态成员变量命名、常量(宏)命名 1). 成员变量: activity中的成员变量以m开头,后面的单词首字母大写(如Button mBackButton; String mName);实体类和自定义View的成员变量可以不以m开头(如ImageView imageView,String name), 2). 局部变量命名:只能包含字母,组合变量单词首字母出第一个外,都为大写,其他字母都为小写 3). 常量(宏)命名: 只能包含字母和_,字母全部大写,单词之间用_隔开UMENG_APP_KEY 3. Application命名 项目名称+App,如SlimApp,里面可以存放全局变量,但是杜绝存放过大的实体对象4. activity和其中的view变量命名 activity命名模式为:逻辑名称+Activity view命名模式为:逻辑名称+View 建议:如果layout文件很复杂,建议将layout分成多个模块,每个模块定义一个moduleViewHolder,其成员变量包含所属view 5. layout及其id命名规则 layout命名模式:activity_逻辑名称,或者把对应的activity的名字用“_”把单词分开。

命名模式为:view缩写_模块名称_view的逻辑名称, 用单词首字母进行缩写 view的缩写详情如下 LayoutView:lv RelativeView:rv TextView:tv ImageView:iv ImageButton:ib Button:btn 6. strings.xml中的 1). id命名模式: activity名称_功能模块名称_逻辑名称/activity名称_逻辑名称/common_逻辑名称,strings.xml中,使用activity名称注释,将文件内容区分开来 2). strings.xml中使用%1$s实现字符串的通配,合起来写 7. drawable中的图片命名 命名模式:activity名称_逻辑名称/common_逻辑名称/ic_逻辑名称 (逻辑名称: 这是一个什么样的图片,展示功能是什么) 8. styles.xml 将layout中不断重现的style提炼出通用的style通用组件,放到styles.xml中; 9. 使用layer-list和selector,主要是View onCclick onTouch等事件界面反映

笔记本电脑内存不足的解决方法

笔记本电脑内存不足的解决方法 在电脑桌面,右键点击“计算机”,然后点击最下方的“属性”。 这时候进入属性界面,在下方就可以看到物理内存的大小了。如果内存是1GB的,进行下面的操作是很有必要的,因为很多软件运行时候,非常用以满载,提示内存不足,如果是4GB的,基本就够用了,不过想使得其更加流畅保险,可以进行以下操作。 方法一:拓展物理内存 由于电脑运行的程序均需经由内存执行,因此,如果执行的程序占用内存比例很大,会导致内存消耗殆尽,这样就使得机器没有反应的空间,故运行就会很卡,甚至死机。由于读取内存优先读取RAM,速度很快,如果不足,电脑会调用虚拟内存,但是虚拟内存的数据交换速度要慢一点,故如果想更加有效,可以扩展计算机内存。 方法二:更改虚拟内存大小 在电脑桌面,右键点击“计算机”,选择“属性”。 进入属性主界面,点击左方的“高级系统配置”。 进入高级配置之后,点击右上方的“设置”。 进入性能选项卡,点击“高级”,在虚拟内存下,点击“更改”。 将第一个项目“自动管理所有驱动器…”前面的勾去掉,选择一个非c盘的磁盘,磁盘剩余内存大点的,不经常用的为佳;勾上“自定义大小”;在填写方框中,初始大小可以设置为物理内存的1~1.5倍,最大值可以设置为物理内存的3倍,点击“设置”,然后点击“确定”。 确定之后,返回到了“性能选项”中,点击“确定”,重启计算机使其更改生效。 然后点击下方“应用”,然后点击“确定”。 进入都最后的确定栏目,问是否立即重启计算机使其生效,如果没有紧急的任务在进行,建议直接点击“立即重新启动”使其更改生效。这样就能够解决内存过小的问题。 感谢您的阅读,祝您生活愉快。

Android开发内存泄漏及检查工具使用培训资料

Android 开发内存泄漏及检查工具使用培 训资料

目录 1内存泄露 (3) 1.1 内存泄露的概念 (3) 1.2 开发人员注意事项 (4) 1.3 Android(java)中常见的引起内存泄露的代码示例 (4) 1.3.1查询数据库没有关闭游标 (6) 1.3.2 构造Adapter时,没有使用缓存的convertView (6) 1.3.3 Bitmap对象不在使用时调用recycle()释放内存 (7) 1.3.4 释放对象的引用 (8) 1.3.5 其他 (9) 2内存泄露的分析工具 (9) 2.1 内存监测工具DDMS --> Heap (9) 2.2 内存分析工具MAT (Memory Analyzer Tool) (10) 2.2.1 生成.hprof文件 (10) 2.2.2 使用MA T导入.hprof文件 (11) 2.2.3 使用MA T的视图工具分析内存 (12)

1内存泄露 Android 应用程序开发以Java语言为主,而Java编程中一个非常重要但却经常被忽视的问题就是内存使用的问题。Java的垃圾回收机制(Garbage Collection 以下简称GC)使得很多开发者并不关心内存使用的生命周期,只顾着申请内存,却不手动释放废弃的内存,而造成内存泄露,引起很多问题,甚至程序崩溃。Android的虚拟机Dalvik VM和java虚拟机JVM没有什么太大的区别,只是在字节码上稍做优化,所以Android应用开发中同样会出现内存泄露的问题。而且由于Android智能平台主要用于嵌入式产品开发,可用的内存资源更加稀少,所以对于我们Android应用开发人员来说,就更该了解Android程序的内存管理机制,避免内存泄露的发生。 1.1 内存泄露的概念 在计算机科学中,内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,严格意义上来说这是不准确的。 一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc,calloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。 这里我们只简单的理解,在java程序中,如果已经不再使用一个对象,但是仍然有引用指向它,GC就无法收回它,当然该对象占用的内存就无法再被使用,这就造成内存泄露。可能一个实例对象的内存泄露很小,并不会引起很大的问题。但是如果程序反复做此操作或者长期运行,造成内存不断泄露,终究会使程序无内存可用,只好被系统kill掉。在以下情况,内存泄漏导致较严重的后果: * 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后很多年内都置之不理); * 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时; * 程序能够请求未被释放的内存(比如共享内存),甚至是在程序终止的时候; * 泄漏在操作系统内部发生; * 泄漏在系统关键驱动中发生; * 内存非常有限,比如在嵌入式系统或便携设备中; * 当运行于一个终止时内存并不自动释放的操作系统(比如AmigaOS)之上,而且一旦丢失只能通过重启来恢复。

提示“内存不足”的原因及解决方法

一、剪贴板占用了太多的内存 实际上,剪贴板是内存中的一块临时区域,当你在程序中使用了“复制”或“剪切”命令后,Windows将把复制或剪切的内容及其格式等信息暂时存储在剪贴板上,以供“粘贴”使用。如果当前剪贴板中存放的是一幅图画,则剪贴板就占用了不少的内存。这时,请按下述步骤清除剪贴板中的内容,释放其占用的内存资源: 1.单击“开始”,指向“程序”或“所有程序”,指向“附件”,指向“系统工具”,然后单击“剪贴板查看程序”,打开“剪贴板查看程序”窗口。 2.在“编辑”菜单上,单击“删除”命令。 3.关闭“剪贴板查看程序”窗口。 为了与Microsoft Office程序提供的多重剪贴板相区分,上述所说的剪贴板,常被我们称为系统剪贴板。如果你正在使用Microsoft Office程序,而且使用了其多重剪贴板功能,那么你应清空“Office剪贴板”上的项目,方法是:在“Office剪贴板”任务窗格(OfficeXP)或工具栏(Office2000)上,单击“全部清空”或“清空‘剪贴板’”。当清空“Office剪贴板”时,系统剪贴板也将同时被清空 二、打开的程序太多 如果同时打开的文档过多或者运行的程序过多,就没有足够的内存运行其他程序。这时,对于多文档界面(MDl)程序,如Wd、Excel等,请关闭当前文档外的所有文档,并退出当前未使用的程序,然后或许你就能够继续执行因“内存不足”而被中断的任务。 三、重新启动计算机 如果只退出程序,并不重新启动计算机,程序可能无法将内存资源归还给系统。请重新启动计算机以释放系统资源,然后再次运行程序或执行被中断的任务。 四、自动运行的程序太多 如果在启动Windows时自动运行的程序太多,那么,即使重新启动计算机,也没足够的内存用来运行其它程序。 (一)确定设置为自动运行的程序是否太多 1.单击“开始”,然后单击“运行”。

Android 应用程序内存泄漏的分析

Android 应用程序内存泄漏的分析以前在学校里学习Java的时候,总是看到说,java是由垃圾收集器(GC)来管理内存回收的,所以当时形成的观念是Java不会产生内存泄漏,我们可以只管去申请内存,不需要关注内存回收,GC会帮我们完成。呵呵,很幼稚的想法,GC没那么聪明啊,理论及事实证明,我们的Java程序也是会有内存泄漏的。 (一)Java内存泄漏从何而来 一般来说内存泄漏有两种情况。一种情况如在C/C++语言中的,在堆中的分配的内存,没有将其释放,或者是在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉(如指针重新赋值);另一种情况则是在内存对象明明已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。第一种情况,在Java中已经由于垃圾回收机制的引入,得到了很好的解决。所以,Java中的内存泄漏,主要指的是第二种情况。 (二)需要的工具 1.DDMS—Update heap Gause GC Heap 是DDMS自带的一个很不错的内存监控工具,下图红色框中最左边的图标就是该 工具的启动按钮,它能在Heap视图中显示选中进程的当前内存使用的详细情况。下图 框中最右边的是GC工具,很多时候我们使用Heap监控内存的时候要借助GC工具,点 击一次GC按钮就相当于向VM请求了一次GC操作。中间的按钮是Dump HPROF file,它 的功能相当于给内存拍一张照,然后将这些内存信息保存到hprof文件里面,在使用我 们的第二个工具MAT的时候会使用到这个功能。 2.MAT(Memory Analyzer Tool) Heap工具能给我们一个感性的认识,告诉我们程序当前的内存使用情况和是否存在内存 泄漏的肯能性。但是,如果我们想更详细,更深入的了解内存消耗的情况,找到问题所 在,那么我们还需要一个工具,就是MAT。这个工具是需要我们自己去下载的,可以下 载独立的MAT RCP 客户端,也可以以插件的形式安装到Eclipse里面,方便起见,推荐 后者。 安装方法: A.登录官网https://www.doczj.com/doc/6a10023433.html,/mat/downloads.php B.下载MAT Eclipse插件安装包(红框所示,当然你也可是选择Update Site在线安装,个人觉得比较慢)

电脑内存不足解决办法

第一招:关闭多余程序如果同时打开的文档过多或者运行的程序过多,就没有足够的内存运行其他程序。这时,对于多文档界面程序,如Word、Excel等,请关闭当前文档外的所有文档,并退出当前未使用的程序,或许你就能够继续执行因“内存不足”而被中断的任务。 第二招:清除剪贴板中的内容1.清除系统剪贴板中的内容(存储Windows复制或剪贴内容的剪贴板) 点击“开始→程序→附件→系统工具→剪贴板查看程序”,在“编辑”菜单上,单击“删除”命令,系统弹出“清除剪贴板”对话框,单击“是”按钮。2.清除多重剪贴板中的内容(Office 程序提供的剪贴板) 在“Office剪贴板”任务窗格(OfficeXP)或工具栏(Office2000)上,单击“全部清空”或“清空‘剪贴板’”。当清空“Office剪贴板”时,系统剪贴板也将同时被清空。 第三招:合理设置虚拟内存如果没有设置Windows虚拟内存,那么很容易收到“内存不足”的消息。点击“开始→设置→控制面板”,双击“系统”。在“系统属性”对话框中,单击“性能”选项卡,然后单击“虚拟内存”按钮。选中“让Windows管理虚拟内存设置-(推荐)”选项,将计算机中可作为虚拟内存使用的硬盘空间量设置为默认值。 第四招:增加可用磁盘空间有四种方法可以增加磁盘的使用空间:1.清空回收站。2.删除临时文件。打开%20“我的电脑”,右键单击要释放其空间的磁盘,然后单击“属性”,在“常规”选项卡上,单击“磁盘清理”按钮,选中要删除的不需要的文件前的复选框进行整理。3.从磁盘中删除过期的文件或已存档的文件。4.删除从未使用过的所有文件。 第五招:重新安装已损坏的程序如果仅仅是使用某个程序时,系统提示内存不足,而其他程序可以正常运行,那么可能的原因是该程序文件被毁坏,从而导致内存不足的问题。请尝试删除并重新安装该程序,然后重新运行该程序。如果系统不再提示内存不足,那么说明原程序文件确实被损坏。 第六招:使用内存优化软件内存优化软件有很多,比如RAM%20Idle和Memo%20Kit就比较出色。它们可以设置自动清空剪贴板、释放被关闭程序未释放的内存,从而免除你手工操作的麻烦,达到自动释放内存的目的,不妨一试。 第七招:重新启动计算机如果只退出程序,并不重新启动计算机,程序可能无法将内存资源归还给系统。在运行重要程序之前,请重新启动计算机以充分释放系统资源。 第八招:减少自动运行的程序如果在启动Windows时自动运行的程序太多,那么,即使重新启动计算机,也没足够的内存用来运行其他程序。这时就需要清除一些不必要的系统自启动程序。

android内存管理-MAT与防范手段

内存管理与防范手段 目录 内存管理与防范手段 (1) 一.内存分配跟踪工具DDMS–>Allocation tracker 使用 (2) 二.内存监测工具DDMS-->Heap (2) 三.内存分析工具MAT(MemoryAnalyzerTool) (3) 1.生成.hprof文件 (4) 2.使用MAT导入.hprof文件 (5) 3.使用MAT的视图工具分析内存 (5) 四.MAT使用实例 (5) 1.生成heap dump (7) 2.用MAT分析heap dumps (9) 3.使用MAT比较heap dumps (11) 五.防范不良代码 (11) 1.查询数据库没有关闭游标 (11) 2.缓存convertView (12) 3.Bitmap对象释放内存 (13) 4.释放对象的引用 (13) 5.Context的使用 (14) 6.线程 (17) 7.其他 (20) 六.优化代码 (20) 1.使用自身方法(Use Native Methods) (20) 2.使用虚拟优于使用接口 (20) 3.使用静态优于使用虚拟 (20) 4.尽可能避免使用内在的Get、Set方法 (20) 5.缓冲属性调用Cache Field Lookups (21) 6.声明Final常量 (21) 7.慎重使用增强型For循环语句 (22) 8.避免列举类型Avoid Enums (23) 9.通过内联类使用包空间 (23) 10.避免浮点类型的使用 (24) 11.一些标准操作的时间比较 (24) 12.为响应灵敏性设计 (25)

一.内存分配跟踪工具DDMS–>Allocation tracker 使用 运行DDMS,只需简单的选择应用进程并单击Allocation tracker标签,就会打开一个新的窗口,单击“Start Tracing”按钮;然后,让应用运行你想分析的代码。运行完毕后,单击“Get Allocations”按钮,一个已分配对象的列表就会出现第一个表格中。单击第一个表格中的任何一项,在表格二中就会出现导致该内存分配的栈跟踪信息。通过allocation tracker,不仅知道分配了哪类对象,还可以知道在哪个线程、哪个类、哪个文件的哪一行。 尽管在性能关键的代码路径上移除所有的内存分配操作不是必须的,甚至有时候是不可能的,但allocation tracker可以帮你识别代码中的一些重要问题。举例来说,许多应用中发现的一个普遍错误:每次进行绘制都创建一个新的Paint对象。将Paint的创建移到一个实例区域里,是一个能极大提高程序性能的简单举措。 二.内存监测工具DDMS-->Heap 无论怎么小心,想完全避免badcode是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方。Androidtools中的DDMS就带有一个很不错的内存监测工具Heap(这里我使eclipse的ADT插件,并以真机为例,在模拟器中的情况类似)。用Heap 监测应用进程使用内存情况的步骤如下: 1.启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的; 2.将手机通过USB链接至电脑,链接时需要确认手机是处于“USB调试”模式,而不是作为“MassStorage”; 3.链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息; 4.点击选中想要监测的进程,比如system_process进程; 5.点击选中Devices视图界面中最上方一排图标中的“UpdateHeap”图标; 6.点击Heap视图中的“CauseGC”按钮; 7.此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况 a)点击“CauseGC”按钮相当于向虚拟机请求了一次gc操作;

电脑内存不足的解决办法

电脑内存不足怎么办 电脑内存不足怎么办?设置虚拟内存按照微软认证系统工程师刘岸松的方法设置方法如下: 设置虚拟内存方法:右击我的电脑/属性/高级/性能中的设置/高级/虚拟内存中的更改/选自定义大小,在初始大小和最大值,同时设为你的物理内存的两倍。如果你的内存是512MB,就将初始大小和最大值同时设为设为10 24MB。设置后需按“设置”按钮,然后再按确定和应用,重新启动电脑设置生效(设置虚拟内存大小没有一个固定的数,大小可以调节。比如:你的物理内存小,虚拟内存可以设的大些“三倍”,物理内存大2G,虚拟内存可以设小点“一倍”,或者还可以不设置虚拟内存,因为如果你设置的虚拟内存小了,系统就会提醒你,设置大了浪费系统资源)。 设置虚拟内存,存储在非系统盘方法: 右击我的电脑/属性/高级/性能中的设置/高级/虚拟内存中的更改/注意:先选中驱动器[卷标]中的C:后点选“无分页文件”在按“设置”按钮,这时已经取消了C盘的虚拟内存。然后你在点选自定义大小,将驱动器[卷标]设在其它盘,并且输入虚拟内存数,然后按“设置”按钮,再按确定应用,重新启动电脑设置生效。 另外,还建议下载恶意软件和木马强杀工具windows清理助手查杀恶意软件和木马:

下载安装后,首先升级到最新版本,然后退出正常模式并重启按F8进入到安全模式。打开软件,点击“系统扫描”,对扫描结果全选,然后点击“执行清理”按钮,如果软件提示你是否“备份”,选择“是”(备份是为了防止发生清理错误,如果清理后系统没有发生异常,就删除备份),按提示进行操作即可。 方法与步骤: 第一步,查看系统和软件所占用的内存情况。 1.打开系统的任务管理器,点击上方的“性能”,查看当前内存使用情况,如下图所示,

电脑内存不足怎么办

电脑内存不足怎么办 电脑常提示提示内存不足,怎么办,有人说可以更换更大容量的内存条,或者直接加内存条,但是这样是要花费银子的,除了花钱外,到底还有没有不用花钱的解决办法呢?这里高手告诉你,方法是有的,想学的话就注意立起耳朵听好了,第一、保留硬盘空间作为额外内存 右键单击桌面上的"我的电脑"图标,再左键单击"属性",打开"系统属性"对话框。在此对话框中单击"性能"标签,再单击"虚拟内存"按钮,复选让"Windows 管理虚拟内存",最后单击"确定"按钮。 第二、删除"启动"组中不需要Windows自动加载的程序 首先查看Windows启动时自动加载了哪些程序,方法是单击"开始"按钮,指向"程序",再指向"启动",此时列出的菜单即Windows启动时自动加载的程序。删除其中不必要的程序,重新启动电脑,也可以节约内存。具体删除方法是: (1)启动"资源管理器",找到C:WindowsStart MenuPrograms"启动"文件夹。 (2)选择不需Windows自动加载的程序和快捷方式,然后单击"文件"菜单的"删除"命令,系统弹出确认删除对话框。 (3)在确认删除对话框中单击"是"按钮。 第三、清除剪贴板的内容 剪贴板是内存中一块临时存储区,用来存放各应用软件剪切或复制的信息。如果当时剪贴板中存放的是一幅图像或一段相当篇幅的文本,则占用了相当大的内存,这就可能导致内存不足,所以只要消除剪贴板中的图像或文本,就可能解决内存不足的问题。要清除剪贴板的内容,请依次单击"开始"、"程序"、"附件"、"剪贴板查看程序",打开"剪贴板查看程序"窗口,然后单击"编辑"菜单的"删除"命令,最后单击"是"按钮。你也许觉得这样有些麻烦,那你不妨以极少的内容,比如一个空格,取代剪贴板中的图像或文本。例如,你正在使用Word97编辑文档,你可以选中文档中的一个空格,再单击常用工具栏上的"剪贴"按钮,由这一空格就取代了剪贴板中的原有图像或文本,这也可以节约内存。 第四、关闭不需用的窗口 你打开了多个窗口,其实也就是运动了多个程序,耗用的内存就多。这时,你可以关闭暂时不用的窗口,关闭不用的程序功能(如状态栏、标尺、任务栏等)就可达到节省内存的目的。 第五、查杀病毒 或许你的电脑只是感染了电脑病毒,内存不足是因为病毒在作怪,消除了病毒,也能解决内存不足的问题。方法当然就是用一款好的杀毒软件进行病毒查杀啦 11解决电脑内存不足的方法 2007-04-21 19:48 虚拟内存 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB 物理内存的话,

笔记本电脑系统提示内存不足原因与解决方法

笔记本电脑系统提示内存不足原因与解决方法,在21世纪数字年代,电脑使用的越来越多,笔记本电脑也是越来越普级了。不过,大家在上网的时候会经常的遇到这些问题,笔记本电脑系统提示内存不足。那么,是什么原因导致笔记本电脑系统提示内存不足呢?这种情况有哪些解决方法呢?泰安数码论坛给大家总结了关于以下几点,可能导致这种情况的原因,大家可以参考一下。 一、剪贴板占用了太多的内存 实际上,剪贴板是内存中的一块临时区域,当你在程序中使用了“复制”或“剪切”命令后,Windows将把复制或剪切的内容及其格式等信息暂时存储在剪贴板上,以供“粘贴”使用。如果当前剪贴板中存放的是一幅图画,则剪贴板就占用了不少的内存。这时,请按下述步骤清除剪贴板中的内容,释放其占用的内存资源: 1.单击“开始”,指向“程序”或“所有程序”,指向“附件”,指向“系统工具”,然后单击“剪贴板查看程序”,打开“剪贴板查看程序”窗口。 2.在“编辑”菜单上,单击“删除”命令。 3.关闭“剪贴板查看程序”窗口。 为了与Microsoft Office程序提供的多重剪贴板相区分,上述所说的剪贴板,常被我们称为系统剪贴板。如果你正在使用Micros Oftice程序,而且使用了其多重剪贴板功能,那么你应清空“Office剪贴板”上的项目,方法是:在“Office剪贴板”任务窗格(OfficeXP)或工具栏(Office2000)上,单击“全部清空”或“清空…剪贴板?”。当清空“Office剪贴板”时,系统剪贴板也将同时被清空 二、打开的程序太多 如果同时打开的文档过多或者运行的程序过多,就没有足够的内存运行其他程序。这时,对于多文档界面(MDl)程序,如Word、Excel等,请关闭当前文档外的所有文档,并退出当前未使用的程序,然后或许你就能够继续执行因“内存不足”而被中断的任务。 三、重新启动计算机 如果只退出程序,并不重新启动计算机,程序可能无法将内存资源归还给系统。请重新启动计算机以释放系统资源,然后再次运行程序或执行被中断的任务。 四、自动运行的程序太多 如果在启动Windows时自动运行的程序太多,那么,即使重新启动计算机,也没足够的内存用来运行其它程序。 (一)确定设置为自动运行的程序是否太多 1.单击“开始”,然后单击“运行”。 2.在“打开”框中,键入“Msconfig”,单击“确定”按钮,打开“系统配置实用程序”窗口。

Android App内存泄露测试方法总结

Android App内存泄露测试方法总结 1、内存泄露 Android系统为每一个运行的程序都指定了一个最大运行内存,超过这个值则会触发OOM机制,反应在界面就是闪退、Crash现象,导致OOM发生的原因比如内存泄露或者是代码不考虑后果使用大量的资源,都有可能导致OOM出现的。OOM的临界值可以通过adb shell getprop | findstr “heap”查看到: 2、Android的GC机制 Android GC机制沿用了java的GC机制,当需要新内存去分配对象的时候而剩余不够的时候,会触发GC,把无用的对象回收掉,其中一个重要的算法便是分代式算法,这个算法把虚拟机分为年轻代、老年代和持久代,对象先分配到年轻代,然后GC多次后还存活的将会移动到老年代,老年代就不会频繁触发GC机制,一般触发频繁的都是年轻代的对象。 3、为什么会内存泄露 上面我们知道了GC机制,那么如果GC过后程序还是没有内存,那么会发生OOM,导致GC后还是没有足够内存分配新对象的主要原因就是内存泄露了。首先要知道内存泄露也就是GC不掉的根源是生命周期长的对象持有生命周期短的对象,导致无用的对象一直无法回收。以下是几个典型的分类: 1)**静态类相关的泄露:**static对象的生命周期伴随着整个程序的生命周期,所以这块要注意不要把一些对象引用添加到static对象里面去,会造成与之关联的对象无法回收。

2)各种资源的释放:包括cursor的关闭,IO流的关闭,bitmap的回收等,进行一些带有缓存的资源一定要关闭或者释放。 3)Handler的泄露:调用handler的delay的时候,会被认为对象是有用的,导致无法回收,还有handler开启线程去下载东西没有下载完成的时候,也会因为线程导致无法回收activity;或者使用handlerThread的时候,有延迟的方法,都会导致无法回收。其主要原因在于handler是持有activity的引用,主线程不是自带一个Looper然后给handler用,导致有关联关系。 4)各种注册引用方法:比如一个常驻的后台线程处理某些时间,把当前对象注册,因为一直持有对象引用,导致这个activity一直保留,所以不用的时候需要反注册。 5)把对象缓存进容器内却忘记remove掉:有时候为了加快页面响应,结果缓存一些对象到容器内,结果越加越多,然后挂掉。 4、系统级别的内存管理 1)LMK机制和oom_adj的值 Android内核有个专用的驱动low-memory-kill,当系统级别的内存不够的时候会根据oom_adj的值以及内存分配状况去kill掉某个进程,oom_adj可以在 /proc/[pid]/oom_adj看到,并且这个值会随着进程的状态改变而改变,比如系统进程一般是-16,越大越容易被干掉。 2)5个进程的优先级 前台进程:当前运行的,基本不死; 可见进程:界面可以见到,比如被遮挡; 服务进程:进程带后台服务的,比如播放器; 后台进程:点击home键,但不退出,就是后台进程了,有比较大几率会被杀;

电脑提示内存不足的解决方法步骤图

电脑提示内存不足的解决方法步骤图 脑屏幕提示内存不足怎么办?有人说可以更换更大容量的内存条,或者直接加内存条,但是这样是要花费银子的,除了花钱外,到底还有没有不用花钱的解决办法呢?下面是学习小编给大家整理的有关介绍电脑屏幕提示内存不足的解决方法,希望对大家有帮助! 电脑屏幕提示内存不足的解决方法 关闭多余程序 Ctrl+Alt+Del或者Ctrl+Shift+Esc,打开任务管理器看看后台是否开着什么多余的软件..什么迅雷啊、word啊、photoshop 啊、乱七八糟的。

清除剪贴板中的内容 随便找个地方输入一个字母,复制,OK! 如果在运行Windows应用程序时,出现“内存不足”的故障,可按下列方法进行检查和处理:

首先应检查Windows的资源使用情况,如果资源占用较多,可用资源较少,打开新文件时会出现“内存不足\"的问题。这时可以清理屏幕,减少窗口的数目,关闭不用的应用程序,包括TSR内存驻留程序,将Windows应用程序最小化为图标,如果问题只是在运行一特殊的应用程序时出现,则与应用软件销售商联系,可能是数据对象的管理不好所致; 如果问题没有解决,清除或保存Clipboard(剪贴板)的内容,使用ControlPanel Desktop选项将墙纸(Wallpaper)设置为None; 如问题仍存在,可用PIF编辑器编辑PIF文件,增大PIF文件中定义的MemoryRequirements:KB Required的值;在标准模式下,选择Prevent ProgramSwitch,该开关选项打开后,退出应用程序返回Windows;如果是386增强模式,则要将Display Usage

android如何查看cpu的占用率和内存泄漏

android如何查看cpu的占用率和内存泄漏 在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程度上很重要,经过查询资料,研究了一下,暂时了解到大概有以下几种方式,如果哪位高手有更好的办法,或者文中描述有错误,还望高手在下面留言,非常感谢! 一、通过eclipse,ADT开发工具的DDMS来查看(Heap) 在“Devices”窗口中选择模拟器中的一个需要查看的程序,从工具条中选“Update heap”按钮,给这个程序设置上“heap Updates”,然后在Heap视图中点击Cause GC就可以实时显示这个程序的一些内存和cpu的使用情况了。

然后就会出现如下界面: 说明: a) 点击“Cause GC”按钮相当于向虚拟机请求了一次gc操作; b) 当内存使用信息第一次显示以后,无须再不断的点击“Cause GC”,Heap视图界面会定

时刷新,在对应用的不断的操作过程中就可以看到内存使用的变化; c) 内存使用信息的各项参数根据名称即可知道其意思,在此不再赘述。 大致解析如下: 这个就是当前应用的内存占用,allocated 是已经分配的内存free是空闲内存, heap size 是虚拟机分配的不是固定值 heap size 的最大值跟手机相关的 有网友说, 一般看1byte的大部分就是图片占用的 如何判断应用是否有内存泄漏的可能性呢? 如何才能知道我们的程序是否有内存泄漏的可能性呢。这里需要注意一个值:Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类类型的对象。在data object一行中有一列是“Total Size”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断: a) 不断的操作当前应用,同时注意观察data object的Total Size值; b) 正常情况下Total Size值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平; c) 反之如果代码中存在没有释放对象引用的情况,则data object的Total Size值在每次GC 后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大, 直到到达一个上限后导致进程被kill掉。

android笔试题及答案

单选题 中可以用来处理js中警示,确认等对话框的是(C) 2.假设assets目录下有文件结构html/,用loadUrl()方法将该网页加载至 webView 时,需传入的参数是(B) A. B. C. D. 3.下列不属于补间动画相关类的是(B) 中网络互连中需要获取状态码,根据状态码来判断请求是否已经完成,下列状 态码表示请求完成的是(D) 5.关于ImageSwitcher 说法错误的是:( B ) 里可以通过Alpha设定转换时候的透明位 B.在使用一个ImageSwitcher之前,不一定要调用setFactory方法 是设置资源被读入到这个ImageSwitcher的时候动画效果 是资源文件从这个ImageSwitcher里消失的时候要实现的动画效果 6.建立蓝牙连接时通过_D_方法来获取BluetoothAdapter对象 D. () 7.关于Handler的说法不正确的是( A ) A.它实现不同进程间通信的一种机制 B.它避免了在新线程中刷新UI的操作 C.它采用队列的方式来存储Message D.它实现不同线程间通信的一种机制 8.Vector和ArrayList的主要区别是(B): A. ArrayList内部基于链表,而Vector是基于数组的

B. Vector的大部分方法做了同步,而ArrayList没有同步 C. Vector是可串行化的,而ArrayList不是 D. Vector实现了RandomAccess,而ArrayList没有 9.下列属于SAX解析xml文件的优点的是(B ) A.将整个文档输在内存中,便于操作,支持删除,修改,重新排列等多种功能 B.不用事先调入整个文档,占用资源少 C.整个文档调入内存,浪费时间和空间 D.不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会消失 a1="abc"; String a2="abc"; String a3="abcd"; 总共创建( A )个String对象。 多选题 1.在添加第一个appwidget窗口小部件时,会执行的方法是(ABD) 2.下列属于SOAP优点的是(ABCD) A,SOAP 与编程语言无关。SOAP 可以使用任何语言来完成 B,SOAP 是完全和厂商无关。 C,SOAP 与平台无关D,SOAP 是简单的,可扩展的 3.下列属于SAX解析XML需要用到的类和接口是(BCD) A.DocumentBuilder 4.在使用蓝牙必须获取的权限是(AD) 5.Chronometer类的重要方法(ABC) 简答题 1.oom是什么如何避免 当程序需要申请一段“大”内存,但是虚拟机没有办法及时的给到,即使做了GC操作以后这就会抛出OutOfMemoryException 也就是OOM 避免:

巧妙解决win7系统下内存不足的问题

巧妙解决win7系统下内存不足的问题 导读: win7一直被视为最稳定,操作最方便的系统,所以使用的用户也相对是比较多的。但是在最关键的时候,win7系统却弹出内存不足的问题,让很多用户手足无措,我们该如何操作解决呢? 第一步:查看系统和软件所占用的内存情况 1.打开系统的任务管理器,点击上方的“性能”选项,查看当前内存使用情况。 2.从这里可以看出内存可能空间不多。如果继续再打开另外一些程序的话,可用内存会越小,然后系统的反应也会越来越慢。切换到任务管理器的“进程”选项卡,然后再点击“内存”选项,让系统按占用内存的大小来排序。 3.这样我们就可以很直观地看到,是那些程序占用了系统大量的内存,从而导致我们系统运行速度变慢。然后自己选择关闭这些占用内存大的进程即可。 4.我们再回到任务管理器中的“性能”中查看当前可用内存,就会发现系统的可用内存比原来要多了。 5.这个方法适用于我们在电脑上的安装的软件太多,并且有很多开机运行程序的情况,比如随系统启动的一些播放器,聊天软件等。通过任务管理器,可以了解我们当前所使用内存的详细信息,还可以帮助我们找到那些软件占用内存空间大,从而根据我们自己的需要来判断要不要把这些软件结束掉或者彻底从系统中删除掉。通过对软件的清理,关闭掉那些我们并没有经常使用,但是却占用系统内存的软件,从而达到释放更多的内存空间来。 第二步:适当调整虚拟内存 1.当我们电脑系统中的物理内存不够用的时候,系统会自动启用虚拟内存来解决内存不足的问题。 所谓虚拟内存,就是系统把硬盘上的一块区域当作物理内存(RAM)来使用,但是由于硬盘的读写速度和内存是远远不能够比拟的,所以在性能上就会有很大区别。当系统内存不够用的时候,大家可以发现我们的硬盘指示灯会一直闪烁,并且这时候电脑的反应速度特别慢,这时候就是系统在利用硬盘上的虚拟内存来应对我们物理内存不足的情况。 2.选择“计算机”图标,点击鼠标右键,选择“属性”,在弹出的系统窗口中,点击左边的“高级系统设置”选项。 3.然后在系统属性窗口中,点击“高级”选项,再点击“设置”选项。 4.在“性能选项”点击“调整为最佳性能”。这样设置的好处在于,牺牲掉视觉效果,从而达到让系减少对硬件资源的占用。 5.接下来,我们点击“高级”选项,可以看到当前的“虚拟内存”大小。 6.如果,我们的计算机内存实在是不够用的情况下,可以适当更改一下虚拟内存。但是请注意,虚拟内存不是越大越好。一般情况下不要超过物理内存的2倍,否则可能会出现系统运行速度更慢的情况。 第三步:增加物理内存 如果上面的这些方法都不能用过了,系统的还是会出现内存不足的话,建议加装内存解决。加装内存对系统的运行速度的提升是最明显不过了。 只有一个足够的内存空间,才能够支撑起整个系统的操作运行,才能让系统的运行速度不受空间的限制,运行更加畅快,如果你也遇到同样的问题的话,不如用用上述介绍的办法吧,一定有成效的哦。

相关主题
文本预览
相关文档 最新文档