`
1025250620
  • 浏览: 230476 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android内存泄露利器(内存统计篇) (转)

 
阅读更多
我们可以通过adb shell "dumpsys meminfo %curProcessName%"命令得到某个进程的内存使用情况。
getMemoryState.bat主要用于解析该命令返回的内存,得到NativeSizeDalvikSizeNativeAllocatedDalvikAllocatedNativePSSDalvikPSS等。它把不同时期得到的数据按时间前后为顺序以逗号作为分隔符的排列输出到一个以进程名命名的文本文件,以便在excel中生产图表。
getMemoryState.bat文件源码
@echo off
call config.bat
set typeNameCol=1
set nativeValueCol=2
set dalvikValueCol=3
set dalvikOtherCol=4
Setlocal enabledelayedexpansion
set path=%path%;%cd%\lib
set /a processNo=0
for %%i in (%processName%) do (
set /a processNo+=1
)
set /a cnt=0
set str=
if "%processShortName%"=="" (
set /a cnt=0
for %%i in (%processName%) do (
set str=%%i
set str=!str:.= !
call getSubStr "!str!" -1
set result=!getSubStr~result!
if !cnt! EQU 0 (
set processShortName=!result!
) else (
set processShortName=!processShortName!;!result!
)
set /a cnt+=1
)
) else (
set /a cnt=0
for %%i in (%processShortName%) do (
set /a cnt=!cnt!+1
)
if not !cnt! EQU %processNo% (
echo the number of process Name is %processNo%
echo the number of process Short Name is !cnt!
echo they should be equal.Please check again!
exit 0
)
)
if not exist %rawDatadir% (
md %rawDatadir%
)
if not exist %outRoot% (
md %outRoot%
)
call genSerial
set serial=!genSerial~result!
set meminfoFile=%rawDatadir%\meminfo%serial%.txt
set slipChar=,
:Loop0Start:
set /a processTotalNumber=cnt
set /a processNo=0
:Loop0Head
call getSubStr "%processShortName%" %processNo%
set curProcessShortName=%getSubStr~result%
call getSubStr "%processName%" %processNo%
set curProcessName=%getSubStr~result%
:GetRawMemInfoFile
set statFile=%outRoot%\%statFilePrefix%_Memory_%curProcessShortName%.txt
adb shell "dumpsys meminfo %curProcessName%" >%meminfoFile%
if not exist %statFile% (
set slipChar=
goto ReadRawMemInfoFile
)
:ReadMemInfoStatisticFile
set NativeSize=
set DalvikSize=
set OtherSize=
set TotalSize=
set NativeAllocated=
set DalvikAllocated=
set OtherAllocated=
set TotalAllocated=
set NativePSS=
set DalvikPSS=
set OtherPSS=
set TotalPSS=
set NativeFree=
set DalvikFree=
set OtherFree=
set TotalFree=
set /a cnt=0
FOR /F "delims=: tokens=2" %%i in (%statFile%) do (
if !cnt! EQU 0 (
set NativeSize=%%i
)
if !cnt! EQU 1 (
set DalvikSize=%%i
if !cnt! EQU 2 (
set NativeAllocated=%%i
if !cnt! EQU 3 (
set DalvikAllocated=%%i
if !cnt! EQU 4 (
set NativePSS=%%i
if !cnt! EQU 5 (
set DalvikPSS=%%i
 
set /a cnt+=1
)
:ReadRawMemInfoFile
set /a cnt=0
FOR /F "skip=1 tokens=1,2,3,4,5,6,7,8" %%i in (%meminfoFile%) do (
if !cnt! EQU 4 (
set NativeSize=!NativeSize!%slipChar%%%j
set DalvikSize=!DalvikSize!%slipChar%%%k
set OtherSize=!OtherSize!%slipChar%%%l
set TotalSize=!TotalSize!%slipChar%%%m
if !cnt! EQU 5 (
set NativeAllocated=!NativeAllocated!%slipChar%%%j
set DalvikAllocated=!DalvikAllocated!%slipChar%%%k
set OtherAllocated=!OtherAllocated!%slipChar%%%l
set TotalAllocated=!TotalAllocated!%slipChar%%%m
)
if !cnt! EQU 6 (
set NativeFree=!NativeFree!%slipChar%%%j
set DalvikFree=!DalvikFree!%slipChar%%%k
set OtherFree=!OtherFree!%slipChar%%%l
set TotalFree=!TotalFree!%slipChar%%%m
)
if !cnt! EQU 7 (
set NativePSS=!NativePSS!%slipChar%%%k
set DalvikPSS=!DalvikPSS!%slipChar%%%l
set OtherPSS=!OtherPSS!%slipChar%%%m
set TotalPSS=!TotalPSS!%slipChar%%%n
)
set /a cnt+=1
 
)
:SaveToMemInfoStatisticFile
echo NativeSize:%NativeSize%>%statFile%
echo DalvikSize:%DalvikSize%>>%statFile%
echo NativeAllocated:%NativeAllocated%>>%statFile%
echo DalvikAllocated:%DalvikAllocated%>>%statFile%
echo NativePSS:%NativePSS%>>%statFile%
echo DalvikPSS:%DalvikPSS%>>%statFile%
:Loop0Tail
set /a processNo+=1
if %processNo% LSS %processTotalNumber% (
goto Loop0Head
)
:Loop0End
echo success!
endlocal
注意需要把bat库genSerial.bat,getSubStr.bat放在子目录lib中。
关于它们的更多内容请参考《getSubStrgenSerial
关于更多的Android内存泄露利器请阅读《Android内存泄露利器(Hprof篇)》,
分享到:
评论

相关推荐

    Android 内存泄漏利器-LeakCanary(最新使用)

    上面是官方文档给出的介绍,LeakCanary是一个在android上检测内存泄漏的依赖。 使用方法 只需要在你的build.gradle中添加如下依赖即可。 debugImplementation ‘com.squareup.leakcanary:leakcanary-android:2.2’ ...

    Node.js-Androidnative层代码内存泄漏问题调试利器

    在Android应用开发中,尤其是涉及到Native层代码时,内存泄漏是一个常见的问题,它可能导致应用程序运行缓慢,甚至崩溃。本文将详细介绍如何使用Node.js配合特定工具,有效地定位和解决Android Native层的内存泄漏...

    Android MAT 内存分析 工具

    **五、MAT与Android内存优化** MAT在Android开发中的应用主要是查找和修复内存泄漏,优化对象生命周期管理,减少内存占用,提升应用性能。开发者应定期进行内存分析,特别是在处理大量数据或长时间运行的应用中。 ...

    Android内存泄漏排查利器LeakCanary

    Android内存泄漏排查利器LeakCanary Android内存泄漏排查利器LeakCanary是一款功能强大且实用的内存泄漏检测工具,主要用来检测Android应用程序中的内存泄漏问题。通过使用LeakCanary,可以快速地检测出应用程序中...

    [微软工具] 基于WinDbg的内存泄漏分析 - 比较复杂情况下调试

    本篇将详细探讨如何利用微软提供的工具,尤其是WinDbg,来分析和定位复杂的内存泄漏问题。 WinDbg是一款强大的调试工具,由微软开发,适用于Windows操作系统。它提供了丰富的命令集和可视化界面,使得开发者能够...

    Android SQLiteSpy数据库利器

    Android SQLiteSpy数据库利器 欢迎大家下载使用

    JAVA内存泄漏分析工具

    总的来说,JAVA内存泄漏分析工具,尤其是MAT,是Java开发者必备的诊断利器,它能够帮助我们高效地排查和解决内存相关问题,确保应用程序的稳定性和性能。通过熟练掌握这类工具的使用,开发者可以更好地优化代码,...

    android内存分析工具

    "Android内存分析工具",尤其是Eclipse的MAT(Memory Analyzer Tool)插件,正是解决这类问题的重要利器。 MAT是IBM提供的一款强大的Java内存分析工具,它不仅适用于Android开发,也适用于任何基于Java的平台。MAT...

    Android反编译利器一步搞定

    本文将深入探讨“Android反编译利器”这一工具,它是如何简化Android逆向工程的过程,并且对新手极其友好。 首先,我们要理解Android应用的基本结构。一个APK文件本质上就是一个ZIP压缩包,包含了应用的资源文件、...

    内存泄漏分析工具mat

    总的来说,MAT作为一款强大的内存泄漏分析工具,是Java开发者不可或缺的调试利器。掌握MAT的使用方法,能够有效提升对内存管理的理解,优化应用程序性能,避免因为内存泄漏导致的系统崩溃或性能下降。

    检测内存泄露,让自己清楚哪里出问题了

    例如,`LeakCanary`是Android开发中的一个流行工具,而`Instruments`是Apple开发环境中用于检测内存泄露的利器。 3. **手动检查**:通过跟踪代码,确保每次`malloc/new`都有对应的`free/delete`。使用智能指针(如...

    Android反编译利器

    Android反编译利器,反编译别人的apk获取相关资源文件

    KernelAddressSanitizer (KASan)内存问题分析利器解析

    KernelAddressSanitizer(KASan)是Linux内核中的一种快速内存错误检测工具,由Google的Andrey Konovalov和Dmitry Vyukov开发。KASan的设计目标是为了在内核级别提供与Userspace的AddressSanitizer(ASan)类似的...

    Android反编译利器.rar

    "Android反编译利器"这个主题,揭示了Android应用的逆向工程实践,这对于我们理解APP的工作原理、学习代码实现、提升安全防护以及调试优化等方面都有重要意义。 首先,我们需要明白Android应用的基本构成,主要由...

    Android群英传:神兵利器

    资源名称:Android群英传:神兵利器内容简介:《Android群英传:神兵利器》以通俗易懂的语言介绍了Android开发的工具使用。《Android群英传:神兵利器》共分为7章。第1章主要讲解如何搭建一个优雅、令人愉悦的开发...

    Android反编译利器-apk改之理

    "Android反编译利器-apk改之理"就是这样一个强大的工具,专为Android开发者和安全研究员设计,用于对APK文件进行深度解析。 首先,我们要明白什么是APK。APK是Android应用程序的包文件格式,包含了运行在Android...

    Android-AndroidHttp网络开发神兵利器

    "Android-AndroidHttp网络开发神兵利器"这个主题主要聚焦于如何在Android平台上高效地进行网络请求和数据交换。以下是对这个主题的详细阐述: 一、Android网络访问基础 Android系统提供了多种方式进行网络通信,...

    android群英传 神兵利器

    根据提供的文件信息,“Android群英传 神兵利器”主要聚焦于介绍一系列与Android开发相关的工具和技术。从标题和描述来看,这部分内容更倾向于工具的介绍与应用,旨在帮助开发者提升工作效率,解决实际问题。下面将...

    徐宜生-Android群英传:神兵利器(带书签高清版)

    《徐宜生-Android群英传:神兵利器》是一本深入探讨Android开发技术的书籍,作者徐宜生以其丰富的经验和独特的见解,为读者揭示了Android开发中的诸多神器和技巧。这本书以高清、带书签的形式呈现,方便读者查阅和...

Global site tag (gtag.js) - Google Analytics