IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> KOOM原理分析之一些基础知识 -> 正文阅读

[移动开发]KOOM原理分析之一些基础知识

资料

使用内存性能分析器查看应用的内存使用情况
HPROF Agent

Profile工具的使用

内存性能分析器概览

在这里插入图片描述
① 用于强制执行垃圾回收事件的按钮。
② 用于捕获堆转储的按钮。
③ 用于指定性能分析器多久捕获一次内存分配的下拉菜单。选择适当的选项可帮助您在进行性能剖析时提高应用性能。
④ 用于缩放时间轴的按钮。
⑤ 用于跳转到实时内存数据的按钮。
⑥ 事件时间轴,显示活动状态、用户输入事件和屏幕旋转事件。
⑦ 内存使用量时间轴,它会显示以下内容:
一个堆叠图表,显示每个内存类别当前使用多少内存,如左侧的 y 轴以及顶部的彩色键所示。
一条虚线,表示分配的对象数,如右侧的 y 轴所示。
每个垃圾回收事件的图标。

内存计算方式

在这里插入图片描述
Java:从 Java 或 Kotlin 代码分配的对象的内存。
Native:从 C 或 C++ 代码分配的对象的内存。
Graphics:图形缓冲区队列为向屏幕显示像素(包括 GL 表面、GL 纹理等等)所使用的内存。(请注意,这是与 CPU 共享的内存,不是 GPU 专用内存。)
Stack:您的应用中的原生堆栈和 Java 堆栈使用的内存。这通常与您的应用运行多少线程有关。
Code:您的应用用于处理代码和资源(如 dex 字节码、经过优化或编译的 dex 代码、.so 库和字体)的内存。
Others:您的应用使用的系统不确定如何分类的内存。
Allocated:您的应用分配的 Java/Kotlin 对象数。此数字没有计入 C 或 C++ 中分配的对象。

查看内存分配情况(Record一段)

在这里插入图片描述

在这里插入图片描述
可以直接跳转到文件
在这里插入图片描述

在这里插入图片描述
选择检查的堆:
default heap:当系统未指定堆时。
image heap:系统启动映像,包含启动期间预加载的类。此处的分配确保绝不会移动或消失。
zygote heap:写时复制堆,其中的应用进程是从 Android 系统中派生的。
app heap:您的应用在其中分配内存的主堆。
JNI heap:显示 Java 原生接口 (JNI) 引用被分配和释放到什么位置的堆。

在这里插入图片描述
Arrange by class:根据类名称对所有分配进行分组。这是默认值。
Arrange by package:根据软件包名称对所有分配进行分组。
Arrange by callstack:将所有分配分组到其对应的调用堆栈。

查看全局JNI引用

在这里插入图片描述

原生内存性能分析器

在这里插入图片描述

Allocations:在选定时间段内通过 malloc() 或 new 运算符分配的对象数。
Deallocations:在选定时间段内通过 free() 或 delete 运算符解除分配的对象数。
Allocations Size:在选定时间段内所有分配的总大小(以字节为单位)。
Deallocations Size:在选定时间段内所有已释放内存的总大小(以字节为单位)。
Total Count:Allocations 列中的值减去 Deallocations 列中的值所得的结果。
Remaining Size:Allocations Size 列中的值减去 Deallocations Size 列中的值所得的结果。

在这里插入图片描述
Allocations:堆中的分配数。
Native Size:此对象类型使用的原生内存总量(以字节为单位)。只有在使用 Android 7.0 及更高版本时,才会看到此列。
Shallow Size:此对象类型使用的 Java 内存总量(以字节为单位)。
Retained Size:为此类的所有实例而保留的内存总大小(以字节为单位)。

在这里插入图片描述
Depth:从任意 GC 根到选定实例的最短跳数。
Native Size:原生内存中此实例的大小。 只有在使用 Android 7.0 及更高版本时,才会看到此列。
Shallow Size:Java 内存中此实例的大小。
Retained Size:此实例所支配内存的大小(根据支配项树)。

将堆转储另存为 HPROF 文件

hprof-conv heap-original.hprof heap-converted.hprof

HPROF Agent

Binary Dump Format(format=b)

The binary output begins with the information:

[u1]*
An initial NULL terminated series of bytes representing the format name and version, in this implementation and historically, the string "JAVA PROFILE 1.0.1" (18 u1 bytes) followed by a NULL byte. If the TAG "HEAP DUMP SEGMENT" is used this string will be "JAVA PROFILE 1.0.2".
u4
size of identifiers. Identifiers are used to represent UTF8 strings, objects, stack traces, etc. They can have the same size as host pointers or sizeof(void*), but are not required to be.
u4
high word of number of milliseconds since 0:00 GMT, 1/1/70
u4
low word of number of milliseconds since 0:00 GMT, 1/1/70

Followed by a sequence of records that look like:

u1
TAG: denoting the type of the record
u4
TIME: number of microseconds since the time stamp in the header
u4
LENGTH: number of bytes that follow this u4 field and belong to this record
[u1]*
BODY: as many bytes as specified in the above u4 field

The following TAGs are supported:

STRING IN UTF8
0x01
ID
ID for this string
[u1]*
UTF8 characters for string (NOT NULL terminated)

LOAD CLASS
0x02
u4
class serial number (always > 0)
ID
class object ID
u4
stack trace serial number
ID
class name string ID

UNLOAD CLASS
0x03
u4
class serial number

STACK FRAME
0x04
ID
stack frame ID
ID
method name string ID
ID
method signature string ID
ID
source file name string ID
u4
class serial number
u4
> 0
line number
0
no line information available
-1
unknown location
-2
compiled method (Not implemented)
-3
native method (Not implemented)


STACK TRACE
0x05
u4
stack trace serial number
u4
thread serial number
u4
number of frames
[ID]*
series of stack frame ID's

ALLOC SITES
0x06
u2
Bit mask flags:
0x1
incremental vs. complete
0x2
sorted by allocation vs. line
0x4
whether to force GC (Not Implemented)

u4
cutoff ratio (floating point)
u4
total live bytes
u4
total live instances
u8
total bytes allocated
u8
total instances allocated
u4
number of sites that follow:
u1
array indicator: 0 means not an array, non-zero means an array of this type (See Basic Type)
u4
class serial number
u4
stack trace serial number
u4
number of live bytes
u4
number of live instances
u4
number of bytes allocated
u4
number of instances allocated


HEAP SUMMARY
0x07
u4
total live bytes
u4
total live instances
u8
total bytes allocated
u8
total instances allocated

START THREAD
0x0A
u4
thread serial number
ID
thread object ID
u4
stack trace serial number
ID
thread name string ID
ID
thread group name ID
ID
thread parent group name ID

END THREAD
0x0B
u4
thread serial number

HEAP DUMP
or
HEAP DUMP SEGMENT
0x0C
or
0x1C
Contains any number of sub-tags, each begins a u1 field (no order implied here):
ROOT UNKNOWN
0xFF
ID
object ID

ROOT JNI GLOBAL
0x01
ID
object ID
ID
JNI global ref ID

ROOT JNI LOCAL
0x02
ID
object ID
u4
thread serial number
u4
frame number in stack trace (-1 for empty)

ROOT JAVA FRAME
0x03
ID
object ID
u4
thread serial number
u4
frame number in stack trace (-1 for empty)

ROOT NATIVE STACK
0x04
ID
object ID
u4
thread serial number

ROOT STICKY CLASS
0x05
ID
object ID

ROOT THREAD BLOCK
0x06
ID
object ID
u4
thread serial number

ROOT MONITOR USED
0x07
ID
object ID

ROOT THREAD OBJECT
0x08
ID
thread object ID
u4
thread serial number
u4
stack trace serial number

CLASS DUMP
0x20
ID
class object ID
u4
stack trace serial number
ID
super class object ID
ID
class loader object ID
ID
signers object ID
ID
protection domain object ID
ID
reserved
ID
reserved
u4
instance size (in bytes)
u2
size of constant pool and number of records that follow:
u2
constant pool index
u1
type of entry: (See Basic Type)
value
value of entry (u1, u2, u4, or u8 based on type of entry)

u2
Number of static fields:
ID
static field name string ID
u1
type of field: (See Basic Type)
value
value of entry (u1, u2, u4, or u8 based on type of field)

u2
Number of instance fields (not including super class's)
ID
field name string ID
u1
type of field: (See Basic Type)


INSTANCE DUMP
0x21

ID
object ID
u4
stack trace serial number
ID
class object ID
u4
number of bytes that follow
[value]*
instance field values (this class, followed by super class, etc)

OBJECT ARRAY DUMP
0x22

ID
array object ID
u4
stack trace serial number
u4
number of elements
ID
array class object ID
[ID]*
elements

PRIMITIVE ARRAY DUMP
0x23
ID
array object ID
u4
stack trace serial number
u4
number of elements
u1
element type (See Basic Type)
[u1]*
elements (packed array)


HEAP DUMP END
0x2C
Terminates a series of HEAP DUMP SEGMENTS.? Concatenation of HEAP DUMP SEGMENTS equals a HEAP DUMP.
CPU SAMPLES
0x0D
u4
total number of samples
u4
number of traces that follow:
u4
number of samples
u4
stack trace serial number


CONTROL SETTINGS
0x0E
u4
Bit mask flags:
0x1
alloc traces on/off
0x2
cpu sampling on/off

u2
stack trace depth

Basic Type

2
object
4
boolean
5
char
6
float
7
double
8
byte
9
short
10
int
11
long

Handling of Arrays

Commands can be sent to HPROF via the socket connection, the accepted COMMAND TAGS are:

FORCE GC (Not implemented)
0x01
DUMP HEAP
0x02
ALLOC SITES
0x03
HEAP SUMMARY
0x04
EXIT THE VM
0x05
DUMP TRACES
0x06
CPU SAMPLES
0x07
CONTROL
0x08
EOF (used to terminate socket connection)
0xFF

The commands take the form:

u1
COMMAND TAG
u4
serial number
u4
number of bytes that follow
[u1]*
ALLOC SITES
u2
Flags:
u4
cutoff ratio (floating point between 0.0 and 1.0)

CPU SAMPLES
u2
ignored
u4
cutoff ratio (floating point between 0.0 and 1.0)

CONTROL
u2
Sub option:
0x1
Turn alloc traces on
0x2
Turn alloc traces off
0x3
Turn CPU sampling on:
ID
thread object ID (0 for all threads)

0x4
Turn CPU sampling off:
ID
thread object ID (0 for all threads)

0x5
Clear CPU sampling
0x6
Set max stack depth:
u2
New max stack depth



  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:52:58  更:2021-12-02 16:54:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:29:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码