当前位置: 首页 > news >正文

打印Android程序所占内存

项目中内存溢出,故关注程序内存使用情况

写了个打印内存使用情况的脚本:

 

view plain copy to clipboard print ?
  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.File;  
  4. import java.io.FileWriter;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.InputStreamReader;  
  8.   
  9. public class CdMemoryReader {  
  10.     BufferedWriter writer;  
  11.   
  12. /** 
  13.  *  
  14. * @Description: TODO 
  15. * @param @param args  args[0] : process name  args[1]: execute time (int) args[2]: sleep time  (long) 
  16. * @return void 
  17. * @throws @param args 
  18. * @date:2010/06/19 
  19. * author: 
  20.  */  
  21.     public static void main(String args[]) {  
  22.         final String brower= "brower";  
  23.         final String mms= "mms";  
  24.           
  25.         long sleeptime = 2000;  
  26.         int times  = 1000 ;  
  27.         String procName = heco ;  
  28.           
  29.        // CdMemoryReader cdMemoryReader  = new CdMemoryReader() ;  
  30.         System.out.println();  
  31.         switch (args.length){  
  32.             default :  
  33.                 System.out.println("the args more than 3 is useless !");  
  34.                 System.out.println();  
  35.             case 3 :  
  36.                 try{  
  37.                     long sleepT = Long.parseLong(args[2]);  
  38.                     sleeptime = sleepT < 1000 ? 1000 : sleepT ;  
  39.                 }catch(NumberFormatException e){  
  40.                     System.out.println("the args: " +args[2] + "is not a number .");  
  41.                     System.exit(0);  
  42.                 }  
  43.             case 2 :  
  44.                 try{  
  45.                     int exectime = Integer.parseInt(args[1]);  
  46.                     times = exectime <= 0 ? 1 : exectime ;  
  47.                 }catch(NumberFormatException e){  
  48.                     System.out.println("the args: " +args[1] + "is not a number .");  
  49.                     System.exit(0);  
  50.                 }  
  51.             case 1 :  
  52.                 String name = args[0];  
  53.                      //这里可以不做判断 直接使用传入的参数 我们是特定打印  
  54.                 if (name.contains(brower)) {  
  55.                     procName = brower;  
  56.                 }else if (name.contains(mms)){  
  57.                     procName = mms;  
  58.                 }else {  
  59.                     System.out.println("the process name is wrong !!");  
  60.                     System.exit(0);  
  61.                 }    
  62.             case 0 :  
  63.                 System.out.println("proce name: " + procName);  
  64.                 System.out.println();  
  65.                 System.out.println("execute times: " + times);  
  66.                 System.out.println();  
  67.                 System.out.println("sleep time: " + sleeptime);  
  68.                 System.out.println();  
  69.                 new CdMemoryReader().cdAccess(sleeptime,times,20,procName);  
  70.                 break ;  
  71.         }  
  72.           
  73.     }  
  74.   
  75.     private void cdAccess(long time, int times, int lines,String procName) {  
  76.   
  77.         Runtime rt = Runtime.getRuntime();  
  78.         StringBuffer buffer = new StringBuffer();  
  79.         String title  = " PID      Vss      Rss      Pss      Uss  cmdline" ;  
  80.         System.out.println(title);  
  81.         try {  
  82.             writer = new BufferedWriter(new FileWriter(new File("D:/log.txt")));  
  83.             writer.write(title + "/n");  
  84.         } catch (IOException e) {  
  85.             // TODO Auto-generated catch block  
  86.             e.printStackTrace();  
  87.         }  
  88.         int printTime = 1 ;  
  89.         for (int i = 0; i < times; i++) {  
  90.             try {  
  91.                 String cmd = "adb shell procrank";  
  92.                 buffer.delete(0, buffer.length());  
  93.                 Process proc = rt.exec(cmd);  
  94.                 InputStream stderr = proc.getInputStream();  
  95.                 InputStreamReader isr = new InputStreamReader(stderr);  
  96.                 BufferedReader br = new BufferedReader(isr);  
  97.   
  98.                 String line = null;  
  99.                 int j = 0;  
  100.                 while ((line = br.readLine()) != null) {  
  101.                     if (j < lines) {  
  102.                         if (line.contains(procName)){  
  103.                             System.out.println(line + "  PrintTime : " + printTime+++ "  execute time : " + (i+1));  
  104.                             buffer.append(line + "/n");  
  105.                             break ;  
  106.                         }  
  107.                     }  
  108.                     j++;  
  109.                 }  
  110. //              buffer.append("/n");  
  111. //              buffer.append("/n");  
  112.                 writer.write(buffer.toString());  
  113.                 writer.flush();  
  114. //              System.out.println("buffer.toString()" + buffer.toString());  
  115.                   
  116.             } catch (Throwable t) {  
  117.                 t.printStackTrace();  
  118.             }  
  119.             try {  
  120.                 Thread.sleep(time);  
  121.             } catch (InterruptedException ie) {  
  122.                 ie.printStackTrace();  
  123.             }  
  124.         }  
  125.         try {  
  126.             writer.close();  
  127.         } catch (IOException e) {  
  128.             // TODO Auto-generated catch block  
  129.             e.printStackTrace();  
  130.         }  
  131.     }  
  132. }  

 

 日志文件默认放在D盘

将uss 的数据获取 放在excel 中可以生成以下的图,更直观些

 

from:  http://blog.csdn.net/zhanghw0917/archive/2010/06/19/5680229.aspx

 

相关文章:

  • TraceView + 避免内存泄露, 有效利用内存
  • Android 开源项目列表
  • Android 软件安装程序(*.apk)的结构分析、反编译以及汉化
  • android 内存使用
  • android 常用adb shell
  • [转]android listview 连续调用 getview问题分析及解决。
  • android自动弹出软键盘
  • 使用Android自带的图标
  • 斯坦福iphone视频教程 – 中英字幕
  • Android中文文档——工具屋
  • Android 避免bitmap内存限制
  • 圆角背景的ListView
  • LayerDrawable层叠样式layer-list
  • android的edittext默认不获得焦点
  • Android中AsyncTask的用法实例
  • angular2开源库收集
  • gops —— Go 程序诊断分析工具
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java到底能干嘛?
  • Laravel5.4 Queues队列学习
  • Rancher-k8s加速安装文档
  • SpringBoot几种定时任务的实现方式
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 猴子数据域名防封接口降低小说被封的风险
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 每天一个设计模式之命令模式
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 强力优化Rancher k8s中国区的使用体验
  • 深度学习入门:10门免费线上课程推荐
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 我与Jetbrains的这些年
  • 阿里云API、SDK和CLI应用实践方案
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (1)虚拟机的安装与使用,linux系统安装
  • (42)STM32——LCD显示屏实验笔记
  • (6)设计一个TimeMap
  • (附源码)springboot教学评价 毕业设计 641310
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (一)SpringBoot3---尚硅谷总结
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 表达式计算:Expression Evaluator
  • .net程序集学习心得
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • []指针
  • [20190401]关于semtimedop函数调用.txt
  • [AR]Vumark(下一代条形码)
  • [BZOJ 1040] 骑士
  • [C和指针].(美)Kenneth.A.Reek(ED2000.COM)pdf
  • [hive] sql中distinct的用法和注意事项