android studio 内存怎么监控内存

来自:简书
作者:于连林520wcf
链接:/p/216b03c22bb8
已获转载授权
内存泄露,是Android开发者最头疼的事。可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴。
怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的Android Studio 检测内存非常方便, 如果结合上MAT工具,LeakCanary插件,一切就变得so easy了。
熟悉Android Studio界面
工欲善其事,必先利其器。我们接下来先来熟悉下Android Studio的界面
本文来自微信公众账号提交,由微讯啦收录,转载请注明出处。
微信扫码 分享文章AndroidStudio内存占用接近700M,吓尿了!_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:551,305贴子:
AndroidStudio内存占用接近700M,吓尿了!收藏
看来我只能继续eclipse了。。
千锋java,Java+大数据全项目实训,两周免费试听,0基础小班授课!千锋java零学费学习,Java+大数据培训,先入学后付款
Android Studio编译慢、卡死和狂占内存怎么破?Google现在最推荐的IDE是Android Studio,可是我用了的体验是——还能不能让人好好的写程序了…首先是编译慢,而且不是首次编译慢,是次次编译慢,动不动一编译就是十几分钟,想必大家写程序也没有谁是一次性写好、编译就OK的吧,大部分还是要改改、编译、看看,然后再改改。这每编译一次十几分钟,还怎么写程序?别跟我讲网上那些方法,什么并行,什么自动编译,都没有本质性的改善。再就是卡死,写几个字母就卡一回,比如你要敲一个变量,它自动出列表时要卡,写一个函数,自动出参数提示时要卡,总之,没个十几分钟你别想敲完一行代码。而且这种卡死是真正的系统级的卡死,即使你想趁这时间切到浏览器去看看网页都切不过去,好几分钟切过去了,再切回来就看到Android Studio给你一个纯白的白屏幕……再就是内存占用,之前还没注意,有一回等得无聊打开任务管理器一看,studio.exe的CPU占用超50%,内存占用在以每秒增加好几M的速度一直上涨,而且是只增不减,一会儿就增加到700多M了。我一XP系统,本来系统就只能识别2G内存,你就给我吃掉700多M…如果是个浏览器、QQ或者下载工具什么的大不了关掉就是,可是你是IDE,我总归还得开发呀,打不得骂不得,只有自己忍着生闷气。各位同道们,你们也是这样么?要怎么解决啊啊啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~网友回复:首先,你用xp,这是一个早已经过时的系统,不仅本身有问题,而且各种软件都不在针对其进行优化。其次,你只有2G ram,放在手机上也只是勉强,竟然用作开发。 这是哪个坑爹的公司?敢报名字吗?第三,xp系统32位的最大支持接近4G的ram,对于一个使用xp系统又为内存困扰的程序员来说,这难道不是常识?解决方法:把电脑砸地上,狠狠的跺上几脚,对着坑爹老板高喊我要用Mac!
把电脑砸地上,狠狠的跺上几脚,对着坑爹的老板高喊我要用Mac!
把电脑砸地上,狠狠的跺上几脚,对着坑爹的老板高喊我要用Mac!
把电脑砸地上,狠狠的跺上几脚,对着坑爹的老板高喊我要用Mac!
把电脑砸地上,狠狠的跺上几脚,对着坑爹的老板高喊我要用Mac!然而macbook air最低配配置一样低。不过话说回来,楼主截图明明是8
随便打开多了些文件就上G了
占内存才好,空间换来的代价是时间,东西这么多不放内存那速度能忍受?
IntelliJ 和Eclipse占用的内存差不多的啊!!!!!
上海java培训,选达内,美国上市教育机构,「java培训之父」Sun认证,先就业后付款!达内java培训,名师授课,0基础120天速成java工程师,0元试学!学习+认证+就业=薪前景!
说到底还是电脑内存不够
原来JAVA就用的IDEA,现在用AS感觉也挺好的 楼主踩叶轻飞又来水经验了,楼上这个Love_Mr_Zhou 居然还帮他水了一贴!死亡舞步wing 于:日 第2季度 星期三 12时18分59秒874毫秒为楼主踩叶轻飞顶帖—— 来自于 Windows 7(64位 ) &
Chrome 41.0 浏览器
内存不是用来欣赏的
把电脑砸地上,狠狠的跺上几脚,对着坑爹的老板高喊我要用Mac!
swing的東西本就垃圾! ——我喂自己袋盐&&Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47
—— 来自于 Windows 7(64位 ) & Chrome 41.0 浏览器
16g内存表示不占十几个g并没有压力
Kimi:爸比你会水贴吗?林志颖:不会啊!Kimi:那我教你好了林志颖:好啊!Kimi:一闪一闪亮晶晶林志颖:不够15字哦!Kimi怒扇林志颖一个耳光,说:你TM不是不会水吗?
在外面遛狗,忽然跳出一杀手把狗杀死。我问道:为什么杀死我的狗?杀手答:有人买你的狗命。我高兴的问道:你语文老师是谁?我给他包个红包。后来越聊越投机。杀手忽然问道:女朋友哪里人?我说道:还没女朋友呢!杀手忽然就把刀子捅过来,嘴里还说道:单身狗也是狗!
一打开就卡死,缓了几分钟,1G内存没了
搞开发的你还用垃圾配置的电脑,你说能不卡吗!哥16G内存,i7四核,显卡970的笔记本怎么不见卡。
AS1.69G 挺顺畅的
把电脑砸地上,狠狠的跺上几脚,对着坑爹的老板高喊我要用Mac!
MyEclipse10.7就还好
没32g内存学毛
win没8g内存还想跑as,卡的你查个网页都出翔
AS感觉要32G才够用,刚刚开2模拟器就内存过半了现在内存条很便宜,2条8G的才338RMB,169一条,DDR4的楼主换主板买4内存槽的,32G绝对够用
楼主还活着吗,找着解决办法没,我只是想做个课设而已
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或&&&&Android 监控当前程序cpu、内存占用的 demo
&Android 监控当前程序cpu、内存占用的 demo
始终在顶层窗口呈现,方便监测当前应用的 cpu 及 内存占用。对应用程序的开发和调试很有帮助。
可能由于刷新太快的问题,本身容易被系统干掉,重启下该 demo 即可,如果谁找到解决该bug的方式也可以告诉我。谢谢。
若举报审核通过,可奖励20下载分
被举报人:
kevinzh021
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
移动开发下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
Android 监控当前程序cpu、内存占用的 demo
所需积分:2
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
Android 监控当前程序cpu、内存占用的 demo
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员基于Android Studio的内存泄漏检测与解决全攻略
基于Android Studio的内存泄漏检测与解决全攻略
自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclipse,成为主流的Android开发IDE。Android Studio在为我们提供了良好的编码体验的同时,也提供了许多对App性能分析的工具,让开发者可以更方便分析App性能。Google在IO大会上一直告诫开发者不要无节制的使用手机内存,要注意一些不良的开发习惯会导致App的内存泄漏。虽然如今网上检测App内存泄漏的文章汗牛充栋,但是要使用DDMS和MAT,不仅使用步骤复杂繁琐,而且要手动排查内存泄漏的位置,操作起来多有不便。其实Android Studio已经开始支持自动进行内存泄漏检查了,本文就带着大家一探其中的奥妙吧。什么是内存泄漏Android虚拟机的垃圾回收采用的是根搜索算法。GC会从根节点(GC Roots)开始对heap进行遍历。到最后,部分没有直接或者间接引用到GC Roots的就是需要回收的垃圾,会被GC回收掉。而内存泄漏出现的原因就是存在了无效的引用,导致本来需要被GC的对象没有被回收掉。举个栗子
private static Leak mL
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
mLeak = new Leak();
class Leak {
mLeak是存储在静态区的静态变量,而Leak是内部类,其持有外部类Activity的引用。这样就导致Activity需要被销毁时,由于被mLeak所持有,所以系统不会对其进行GC,这样就造成了内存泄漏。再举一个最常犯的栗子public class Singleton {
private static S
private Context mC
private Singleton(Context context){
this.mContext =
public static Singleton getInstance(Context context){
if (instance == null){
synchronized (Singleton.class){
if (instance == null){
instance = new Singleton(context);
如果我们在在调用Singleton的getInstance()方法时传入了Activity。那么当instance没有释放时,这个Activity会一直存在。因此造成内存泄露。解决方法可以将new Singleton(context)改为new Singleton(context.getApplicationContext())即可,这样便和传入的Activity没关系了。内存泄漏的检测打开Android Studio,编译代码,在模拟器或者真机上运行App,然后点击,在Android Monitor下点击Monitor对应的Tab,进入如下界面在Memory一栏中,可以观察不同时间App内存的动态使用情况,点击可以手动触发GC,点击可以进入HPROF Viewer界面,查看Java的Heap,如下图Reference Tree代表指向该实例的引用,可以从这里面查看内存泄漏的原因,Shallow Size指的是该对象本身占用内存的大小,Retained Size代表该对象被释放后,垃圾回收器能回收的内存总和。下面我们以掌上道聚城客户端为例,来一探内存泄漏检测的方法。打开Android Studio,编译代码,运行掌上道聚城,然后开始尽情的耍我们的App啦,然后就从Memory Monitor里面观察App的内存使用曲线,突然发现,纳尼!!!怎么内存使用越来越大了,这就很有可能是发生内存泄漏了,然后点击手动进行GC,再点击观看JavaHeap,点击Analyzer Task,Android Monitor就可以为我们自动分析泄漏的Activity啦,分析出来如下图所示在Reference Tree里面,我们直接就可以看到持有该Activity的单例对象,直接定位到该单例中的代码,发现代码中出现了public static VideoTagHelper getInstance(Context context) {
if (tagHelper == null) {
tagHelper = new VideoTagHelper();
tagHelper.context =
return tagH
和刚刚举得栗子里出现的错误一模一样啊,这段代码是谁写的,拖出去······我们修复了检查出的内存泄漏的问题,并将修复前和修复后的代码在相同的模拟器上运行并进行相同的操作,查看他们使用内存的情况,如下图所示有内存泄漏的情况,占用内存约为43M修复了内存泄漏问题,占用内存为36M在修复了内存泄漏问题后,内存使用下降了16.3%!!!掌握了Android Monitor的使用方法后,妈妈再也不担心我写的App会出现内存泄漏啦!!!
发表评论:
TA的最新馆藏利用Android Studio、MAT对Android进行内存泄漏检测 - 推酷
利用Android Studio、MAT对Android进行内存泄漏检测
Android开发中难免会遇到各种内存泄漏,如果不及时发现处理,会导致出现内存越用越大,可能会因为内存泄漏导致出现各种奇怪的crash,甚至可能出现因内存不足而导致APP崩溃。
内存泄漏分析工具
Android的内存泄漏分析工具常用有Android Studio和基于eclipse的MAT(Memory Analyzer Tool)。通过两者配合,可以发挥出奇妙的效果。Android Studio能够快速定位内存泄漏的Activity,MAT能根据已知的Activity快速找出内存泄漏的根源。
第一步:强制GC,生成Java Heap文件
我们都知道Java有一个非常强大的垃圾回收机制,会帮我回收无引用的对象,这些无引用的对象不在我们内存泄漏分析的范畴,Android Studio有一个 Android Monitors 帮助我们进行强制GC,获取 Java Heap 文件。
强制GC:点击 Initate GC (1)按钮,建议点击后等待几秒后再次点击,尝试多次,让GC更加充分。然后点击 Dump Java Heap (2)按钮,然后等到一段时间,生成有点慢。
生成的Java Heap文件会在新建窗口打开。
第二步:分析内存泄漏的Activity
点击 Analyzer Tasks 的 Perform Analysis (1)按钮,然后等待几秒十几秒不等,即可找出内存泄漏的Activity(2)。
那么我们就可以知道内存泄漏的Activity,因为这个例子比较简单,其实在(3)就已经可以看到问题所在,如果比较复杂的问题Android Studio并不够直观,不够MAT方便,如果Android Studio无法解决我们的问题,就建议使用MAT来分析,所以下一步我们就生成标准的hprof文件,通过MAT来找出泄漏的根源。
第三步:转换成标准的hprof文件
刚才生成的Heap文件不是标准的Java Heap,所以MAT无法打开,我们需要转换成标准的Java Heap文件,这个工具Android Studio就有提供,叫做 Captures ,右击选中的 hprof , Export to standard .hprof 选择保存的位置,即可生成一个标准的hprof文件。
第四步:MAT打开hprof文件
,使用方式和eclipse一样,这里就不多说了,打开刚才生成的hprof文件。点击(1)按钮打开Histogram。(2)这里是支持正则表达式,我们直接输入Activity名称,点击 enter 键即可。
搜索到了目标的Activity
右击搜索出来的类名,选择 Merge Shortest Paths to GC Roots 的 exclude all phantom/weak/soft etc. references ,来到这一步,就可以看到内存泄漏的原因,我们就需要根据内存泄漏的信息集合我们的代码去分析原因。
第六步:根据内存泄漏信息和代码分析原因
使用Handler案例分析,给出的信息是Thread和android.os.Message,这个Thread和Message配合通常是在Handler使用,结合代码,所以我猜测是Handler导致内存泄漏问题,查看代码,直接就在函数中定义了一个final的Handler用来定时任务,在Activity的onDestroy后,这个Handler还在不断地工作,导致Activity无法正常回收。
// 导致内存泄漏的代码
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
textView = (TextView) findViewById(R.id.text);
final Handler handler = new Handler();
handler.post(new Runnable() {
public void run(){
textView.setText(String.valueOf(timer++));
handler.postDelayed(this, 1000);
修改代码,避免内存泄漏
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
textView = (TextView) findViewById(R.id.text);
handler.post(new Runnable() {
public void run(){
textView.setText(String.valueOf(timer++));
if (handler != null) {
handler.postDelayed(this, 1000);
private Handler handler = new Handler();
protected void onDestroy(){
super.onDestroy();
// 避免Handler导致内存泄漏
handler.removeCallbacksAndMessages(null);
重新测试,确保问题已经解决。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 android studio吃内存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信