精华内容
下载资源
问答
  • adb释放内存
    千次阅读
    2021-01-17 13:01:46

    很多安卓手机用户都会碰到一种情况,手机配置还算不错,可用一段时间后手机的运行速度就会变慢,手机的电量消耗、流量消耗直线上升。这在安卓手机的用户群体里,算是一种普遍现象。今天Blue君针对这些现象进行了分析,并给出了一些实用的解决办法。

    原因:自启软件惹的祸

    1.自启软件拖慢手机运行速度

    众所周知,如今安卓手机的硬件配置已经非常高了,尽管如此,安卓手机越用越慢也是大家都认同的事实。其实拖慢手机运行速度的最大元凶就是自启软件。用过微信的盆友都知道,安装微信之后只要你不主动禁用其开机启动选项,开机后你就会收到微信的消息推送。

    2.自启软件耗电、耗流量

    某手机专家做过一个实验,将一部安卓手机装满网购、社交等各类APP,而另一部相同的手机保持原状,然后将两部手机同时重启,待机半小时后记录两者的耗电情况。

    实验结果显示,装满APP的手机耗电量是另一部手机的3倍。自启软件不仅可以在用户未主动开启的情况下调用手机资源,部分自启软件还可能会因兼容性问题导致手机耗电更多。

    介绍四种加快手机运行速度的方案:

    更多相关内容
  • 清理释放Android 安卓手机内存空间方法教程
  • = USSVSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)是单个进程全部可访问的地址空间RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)是单个进程实际占用的内存大小,对于单个共享库,...

    一、procrank

    VSS >= RSS >= PSS >= USS

    VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)是单个进程全部可访问的地址空间

    RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)是单个进程实际占用的内存大小,对于单个共享库, 尽管无论多少个进程使用,实际该共享库只会被装入内存一次。

    PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

    USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)USS 是一个非常非常有用的数字, 因为它揭示了运行一个特定进程的真实的内存增量大小。如果进程被终止, USS 就是实际被返还给系统的内存大小。

    USS 是针对某个进程开始有可疑内存泄露的情况,进行检测的最佳数字。怀疑某个程序有内存泄露可以查看这个值是否一直有增加

    二、dumpsys meminfo(或者直接读取“/proc/meminfo”文件来获得内存信息--Linux系统)

    1、cat /proc/meminfo

    MemTotal: 所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)。

    MemFree:被系统留着未使用的内存。

    Buffers: 用来给文件做缓冲的大小。

    Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache ).

    SwapCached:swap 缓存的大小,Android很少使用swap的,经常为0。被高速缓冲存储器(cache memory)用来交换空间的大小,用来在需要的时候很快的被替换而不需要再次打开I/O端口。

    Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要,否则不会被移作他用。

    Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径。

    SwapTotal: 交换空间的总大小。

    SwapFree: 未被使用交换空间的大小。

    2、dumpsys meminfo 进程pid或程序包名

    查询结果根据以下4类分类:

    8eb93e8f40da8277801e86d5b4714ddd.png

    OOM(out of memory)即内存泄露。一个程序中,已经不需要使用某个对象,但是因为仍然有引用指向它垃圾回收器就无法回收它,当该对象占用的内存无法被回收时,就容易造成内存泄露。

    Android的一个应用程序的内存泄露对别的应用程序影响不大,因为为了能够使得Android应用程序安全且快速的运行,Android的每个应用程序都会使用一个专有的Dalvik虚拟机实例来运行,也就是说每个应用程序都是在属于自己的进程中运行的。如果程序内存溢出,Android系统只会kill掉该进程,而不会影响其他进程的使用(如果是system_process等系统进程出问题的话,则会引起系统重启)。

    展开全文
  • adb 常用的命令

    千次阅读 2021-03-07 15:00:43
    说到 ADB 大家应该都不陌生,即AndroidDebug Bridge,Android调试桥,身为 Android 开发的我们,熟练使用 ADB 命令将会大大提升我们的开发效率, ADB 的命令有很多,今天就来总结下我在开发常用到的一些 ADB 命令。...

    说到 ADB 大家应该都不陌生,即 Android Debug Bridge,Android调试桥,身为 Android 开发的我们,熟练使用 ADB 命令将会大大提升我们的开发效率, ADB 的命令有很多,今天就来总结下我在开发常用到的一些 ADB 命令。

    查看版本

    ADB 的安装这里就不多说了,输入以下命令有如下提示就证明你环境ok,否则自行网上搜索解决下。

    $ adb version

    Android Debug Bridge version 1.0.36

    Revision 8f855a3d9b35-android

    查看连接设备

    输入以下命令可以查询已连接的设备与模拟器:

    $ adb devices

    List of devices attached

    02ae0c1021089daf       device

    安装一个apk,执行以下命令:

    adb install

    // 如: adb install demo.apk

    如果不是当前目录,则后面要跟路径名:

    adb install /Users/storm/temp/demo.apk

    保留数据和缓存文件,重新安装apk:

    adb install -r demo.apk

    安装apk到sd卡:

    adb install -s demo.apk

    卸载

    直接卸载:

    adb uninstall

    // 如:adb uninstall com.stormzhang.demo

    卸载 app 但保留数据和缓存文件:

    adb uninstall -k com.stormzhang.demo

    启动/停止 Server

    一般来说,下面两个命令基本不会用到,因为只要设备连接正确,会自动启动 adb server 的,不过大家也需要知道这俩命令:

    启动 adb server :

    adb start-server

    停止 adb server :

    adb kill-server

    列出手机装的所有app的包名:

    adb shell pm list packages

    列出系统应用的所有包名:

    adb shell pm list packages -s

    列出除了系统应用的第三方应用包名:

    adb shell pm list packages -3

    使用 grep 来过滤:

    adb shell pm list packages | grep qq

    清除应用数据与缓存

    有些时候我们测试需要清除数据与缓存,则需要用到如下命令:

    adb shell pm clear

    // 如:adb shell pm clear com.stormzhang.demo

    启动应用

    如果我们想要通过 adb 来启动应用

    adb shell am start -n com.stormzhang.demo/.ui.SplashActivity

    强制停止应用

    有些时候应用卡死了,需要强制停止,则执行以下命令:

    adb shell am force-stop

    // 如:adb shell am force-stop cn.androidstar.demo

    查看日志

    adb logcat

    重启

    adb reboot

    获取序列号

    $adb get-serialno

    02ae0c1021089daf

    获取 MAC 地址

    $adb shell  cat /sys/class/net/wlan0/address

    bc:f5:ac:f9:f7:c8

    查看设备型号

    $adb shell getprop ro.product.model

    Nexus 5

    查看 Android 系统版本

    $adb shell getprop ro.build.version.release

    7.0.1

    查看屏幕分辨率

    $adb shell wm size

    Physical size: 1080×1920

    查看屏幕密度

    $adb shell wm density

    Physical density: 480

    关于 ADB 的命令有太多,以上只列了一些我比较常用的命令,关于更多的命令可以见这里:

    https://github.com/mzlogin/awesome-adb

    ADB IDEA

    以上命令你们觉得是不是很方便了?但是我们在用 Android Studio 开发的时候如果有一款插件是不是更方便了?所以这里推荐一个 AS 插件 ADB IDEA ,装了这款插件可以直接在 AS 中快速操作一些 ADB 命令,非常方便。

    安装完成后,快捷键直接唤起:

    Mac OSX: Ctrl+Shift+A

    Windows/Linux: Ctrl+Alt+Shift+A

    直接看下截图:

    d38d587de4cb730a32b4ee7557ce287b.png

    展开全文
  • 判断是否是内存泄露拿到真机,USB连接,杀掉多余后台进程,打开Perfdog,接下来一顿操作猛如虎,Perfdog具体操作不在赘述,有关perfdog怎么使用的教程可以参考Perfdog使用教程拿到内存趋势图使用手机此图一出,基本...

    背景

    最近QC同学在跑游戏的过程中发现玩的时间久了游戏会发生闪退,经过搜集信息后排除了功能性bug。

    一.判断是否是内存泄露

    拿到真机,USB连接,杀掉多余后台进程,打开Perfdog,接下来一顿操作猛如虎,Perfdog具体操作不在赘述,有关perfdog怎么使用的教程可以参考

    Perfdog使用教程

    拿到内存趋势图

    使用手机

    f0ddc16351fa063abd208a336e63f54e.png

    728e45f1b91951b3d1e32915df50b9bd.png


    此图一出,基本就可以断定内存泄露了,这是正常玩游戏,游戏运行了30分钟的内存趋势图;

    结论:,内存持续上升,存在内存泄露。

    一个优秀的游戏通常情况内存是有上升有回落,多次运行同一个功能也不会导致内存功能持续上升;

    呈现出起伏状态,比如:

    2339f3f479019c4e1049a8353bd2537c.png


    知道了存在内存泄露,下面就要开始分析有可能是哪里导致的内存泄露;

    二.分析泄露原因

    一般针对unity游戏来说,内存瓶颈是资源和Mono堆内存,两部分;

    以下是unity游戏程序在运行时的内存分配概况

    39c4660f23d42b770cc6ade3d869a939.png


    先简单介绍下Mono,unity使用Mono机制来完成跨平台的操作,就好像JAVA使用虚拟机来完成跨平台操作一样,Mono也是一种跨平台的实现。跨平台其实现原理在于使用了叫CIL(Common Intermediate Language通用中间语言,也叫做MSIL微软中间语言)的一种代码指令集,CIL可以在任何支持CLI(通用语言基础结构)的环境中运行,就像.NET是微软对这一标准的实现,Mono则是对CLI的又一实现。由于CIL能运行在所有支持CLI的环境中,例如刚刚提到的.NET运行时以及Mono运行时,也就是说和具体的平台或者CPU无关。

    一般对于unity开发的游戏来说,内存的开销都是围绕下面的三个方面:

    1.资源内存的占用;

    2.引擎模块自身内存占用;

    3.托管堆内存占用。

    Mono通过垃圾回收机制(GarbageCollect,简称GC)对内存进行管理,可以自动地改变堆的大小来适应你所需要的内存,并且是可以适时地调用垃圾回收(GarbageCollection)操作来释放已经不需要的内存。也就是说Mono会自动释放一些内存,但要注意的是GC释放的内存只会留给mono使用,并不会交还给操作系统,因此mono堆内存是只增不减的。

    这里简单介绍下Mono回收原理:

    Mono会跟踪每次内存分配的动作,并维护一个分配对象表,当GC的时候,以全局数据区和当前寄存器中的对象为根节点,按照引用关系进行遍历,对于遍历到的每一个对象,将其标记为活的(alive)。所有对象的被标记意味着该对象可以通过全局对象或者当前上下文访问到,而没有被标记的对象则意味着该对象无法通过任何途径访问到,即该对象“失联”了,GC最终会将所有“失联”的对象内存进行回收。

    内存泄露定义

    我们把对象已经不再需要使用却没有被GC回收的情况称为mono内存泄漏。Mono内存泄漏会使空闲内存减少,GC频繁,mono堆不断扩充,最终导致游戏内存占用的升高。最终导致内存过高,进程被操作系统Kill或者崩溃。简单来说,也就是一些对象被实例化出来后没有被释放掉,一种保存在内存中,新的对象又需要申请新的内存空间,导致内存不断上升。

    重点关注点

    配置文件的使用、纹理、网格、RenderTexture和粒子系统;

    比如频繁的创建销毁对象是否使用对象池,或者粒子,纹理等资源显示过后是否被及时从内存中释放,等等;

    三.测试手段

    1.首先通跑测试,确定问题确定原因,比如我上面通过通跑游戏确定存在内存泄露;

    2.缩小范围,由于一个游戏在运行的过程中场景比较复杂,上面的同跑并不能准确定位问题,所以我们要划分场景测试,例如我在上面的通跑游戏过程中包括以下场景,打开关闭UI界面,战斗场景,切换地图,升级武器等,如果没有比较明显的数据,那就要分别针对以下场景进行测试。比如UI场景可以反复打开关闭UI界面,战斗场景可以持续战斗挂机,反复切换地图等等,总之是把游戏内进行的行为减少,细化要检测的场景;

    f96be45043a4618b096ea384564908de.png

    3.定位问题

    如果某个场景发生内存泄露,边定位到那个场景运行游戏,而在游戏运行时,相应的引擎也有一些工具可以查看具体的代码使用情况,比如unity的Profiler。

    如果多个场景都出现内存泄露,那就要查找这些场景所交叉的部分,比如通信框架等;而本次经过多个场景的测试发现都存在泄露,最后经过排查发现是使用的通信框架存在泄露问题。

    四,Perfdog内存相关简介

    通常情况下安卓可以轻松获取到的内存有4种数据,我们也可以通过ADB来获取,

    VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

    RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)

    PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

    USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

    一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

    而Perfog的Memory也就是 Android PSS Memory,也是我们通常来用作代表内存的数据,是实际使用的物理内存大小。

    Swap Memory (Swap Memory,部分设备支持Swap功能,在启用Swap功能后,系统会对PSS内存进行压缩,Swap增加,PSS会相应减少,由于压缩会占用CPU资源,同时相应会导致FPS降低)

    Virtual Memory(VSS) 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

    五、Perfdog新功能初探

    PerfDog 3.5版本刚刚推出,新增一个最新的数值,CPU Usage(Normalized):规范化CPU利用率

    官方给出的解释为:

    传统计算方法:当前时刻CPU频率下,CPU Usage = CPU执行时间/CPU总时间。

    由于移动设备CPU频率时刻变化,用传统CPU利用率计算方法,假定在低频率时刻计算出CPU利用率=30%,和在CPU高频时刻计算出CPU利用率=30%。同样都是30%但性能消耗是完全不样的,明显高频消耗更高。传统CPU利用率已无法真实反映性能消耗。

    所以我们需要一种规范化(可量化)的统计方式。将频率因素考虑进去。

    CPU Usage(Normalized)= (CPU执行时间/CPU总时间) * (当前时刻所有CPU频率之和/所有CPU频率最大值之和)。

    PerfDog两种统计方式都有。CPU Usage默认为规范化CPU利用率。建议使用规范化CPU利用率作为衡量性能指标。

    具体的描述可以看这里:规范化CPU利用率

    尝鲜体验以下。测试使用过程和之前的一样。来看看新增的数据对比

    title:

    6112fc06c5b49b90f799af1ff6c799c6.png

    CPU Usage趋势图对比:

    7031fc54e91349804535dc2d9d459931.png

    CPU Core Usage趋势图对比:

    cb0567728ef00da85f14a57179d71537.png

    从趋势图来看的话,实际上两种算法并无太大差异,但是精确到具体帧的使用率,差异会比较明显,单纯从性能的角度来说,传统CPU利用率仅能从数值的角度体现手机的CPU使用程度,但是无法从性能使用程度的角度表达手机的CPU使用效率,就像前文所说,低频率时刻计算出CPU利用率=30%,和在CPU高频时刻计算出CPU利用率=30%。同样都是30%但性能消耗是完全不样的。规范化CPU利用率数值可以弥补这一缺点。目前的测试行业良莠不齐,规范指标较少,如果真的可以做到统一行业标准不失为一件好事。

    关注腾讯WeTest,了解更多热门测试产品:WeTest腾讯质量开放平台 - 专注游戏,提升品质

    展开全文
  • android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大...adb shell dumps...
  • 这篇文章主要介绍了Android系统检测程序内存占用各种方法,并对内存信息的详细介绍 通过读取文件”/proc/meminfo”的信息能够获取手机Memory的总量,而通过ActivityManager.getMemoryInfo(ActivityManager....
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼我重复一楼的问题,range(1024*1024)确实占用很大内存,但是del后,内存几乎是马上就释放了,没有内存持续占用问题。我测试操作系统是macox10.5.6在实际应用中,range对...
  • adb 常用命令获取连接设备号:adb devices列出设备所有已安装的包名 (不需root权限)adb shell “pm list packages”,可以加上grep 进行筛选(windows系统使用findstr /i "xxxx" 或者 find)3)查看进程列表:adb shell...
  • Android adb命令分析内存

    千次阅读 2019-04-27 17:26:53
    原文地址 ... 1.adb shell dumpsys meminfo yourpakagename Pss对应的TOTAL值:内存所实际占用的值。 Dalvik Heap Size:从RuntimetotalMe...
  • 1 查看内存信息命令:adb shell dumpsys meminfo输入命令:dumpsys meminfo pid,比如查看手机安装的360安全卫士,那么实际命令应该为:dumpsys meminfo 3253,如下图所示:参数含义:dalvik : dalvik使用的内存...
  • 满足 Android 开发或测试人员的常用 ADB 实用命令。
  • adb内存检测

    2018-07-06 15:14:47
    实时监测内存情况:dumpsys meminfoPSS的意思是:Propotionate Set Size(比例集大小)“比例集大小”是Android系统计算的统计信息,以确定是否要杀死您的进程。 只看你的应用程序消耗多少内存,是不正确的方式,因为...
  • 1.通过adb shell dumpsys meminfo packageName来查看内存使用状况在没有打开应用的情况下,该命令返回的数据是这样的:2.打开这个应用的MainActivity,再通过命令查看:可以看到打印出来很多的信息,而对于我们查看...
  • 主要介绍了Android Native 内存泄漏系统化解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 安卓内存优化

    2021-06-09 11:01:32
    为什么要进行内存优化安卓应用如果不进行内存优化,一些不良的代码习惯或编码可能有内存泄漏,甚至...对于你的手机,都有自己的app内存配置参数,可以adb查看adb shell getprop | findstr heap显示[dalvik.vm.heap...
  • ADB常用命令

    千次阅读 2021-09-05 12:36:35
    一、 adb安装及配置 1 下载安装 创建目录,点击安装exe文件或将免安装版放到创建目录下 下载及简介地址: Android 调试桥 (ADB)  |  Android 开源项目  |  Android Open Source Project (google.cn) 2 配置环境 ...
  • adb shell cat /proc/meminfo 查看系统内存

    千次阅读 2018-05-03 17:45:56
    Android查看系统可用内存命令 cat /proc/meminfo 其中MemAvailable为新增字段:
  • adb dumpsys 查看内存

    2015-03-06 17:13:54
    android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大... adb shell dump
  • 您是否曾经尝试在任务管理器或类似程序中监视进程,并想知道为什么即使程序释放了所有内存内存也不会减少? 然后,这个小型图书馆非常适合您! 它甚至能够观察到调用free()或delete之前和之后的差异。
  • andorid查看某个进程占用的内存
  • App 性能问题如 app 使用时卡顿严重或者加载页面慢,cpu 占用率高,app 闪退等,在 测试过程中,则需...包含冷启动热启动测试,CPU,内存条占用测试,FPS流畅度测试,GPU渲染测试,adb monkey性能测试,流量电量监控测试
  • 手机内存与缓存清理

    2014-06-25 14:14:00
    个人辛勤整理,拿来与大家分享,功能上个人认为算是实现了,虽然不如360等流氓软件,但是可以作为需要这方面需求的朋友共同学习交流,还希望路过的朋友请关注新浪微博,小小弓长张,讨论学习
  • Android内存分析工具(四):adb命令

    千次阅读 2015-08-20 23:30:03
    adb shell dumpsys meminfo yourpakagename 其中Pss对应的TOTAL值为内存所实际占用的值
  • Android ADB命令详解

    千次阅读 2020-10-07 20:21:12
    adb的全称为Android Debug Bridge.是android司机经常用到的工具 . 你能在本篇文章中学到什么? adb基本指令 Shell AM&PM adb模拟用户事件 logcat日志 常用节点 远程ADB 常用命令集 一. 基本指令 进入指定设备 adb...
  • adb shell dumpsys mminfo 命令 查看内存

    千次阅读 2015-12-11 17:21:08
    adb shell dumpsys 命令 查看内存 标签: shellandroidcrashjava 2011-11-22 20:47 37434人阅读 评论(6) 收藏 举报  分类: android 工具(10) android性能优化(10)  版权声明:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,103
精华内容 3,641
关键字:

adb释放内存