移动App性能测评与优化1.3.1 Dalvik Heap内部机制

简介:

1.3.1 Dalvik Heap内部机制

为了弄清楚为什么DVM占着内存不释放,我们阅读了DVM分配内存部分的代码。位置在Android源码的dalvik/vm/alloc下,约255KB。分析的主要流程如下:

1)DVM使用mmap系统调用从系统分配大块内存作为Java Heap。根据系统机制,如果分类的内存尚未真正使用,就不计入PrivateDirty和Pss。例如图1-8所示,Heap Size/Alloc很多,但大部分是共享的,实际使用的较少。所以反映到PrivateDirty/Pss里的内存并不多。

 

图1-8 共享内存较多的进程

2)新建对象之后,由于要向对应的地址写入数据,内核开始真正分配该地址对应的4KB物理内存页面。

Alloc.cpp中,从第176行起的代码如图1-9所示。

 

图1-9 DVM虚拟机分配内存的代码

3)运行一段时间后,开始垃圾回收(GC),有些对象被回收了,有些会一直存在,如图1-10所示。

 

图1-10 黑点表示的内存会被回收

4)在GC时,有可能会进行trim,即将空闲的物理页面释放回系统,表现为PrivateDirty/Pss下降。HeapSource.cpp中,第431行代码如图1-11所示。

 

图1-11 释放内存回系统的代码(一)

HeapSource.cpp中,第1304行代码如图1-12所示。

 

 

图1-12 释放内存回系统的代码(二)

相关文章
|
2天前
|
JSON Dart 安全
Flutter App混淆加固、保护与优化原理
Flutter App混淆加固、保护与优化原理
56 0
|
2天前
|
架构师 Java
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
53 0
|
7月前
|
Web App开发 数据安全/隐私保护 iOS开发
app优化ios,iOS app上架流程问题集锦,ASO新手小白必看(上)
app优化ios,iOS app上架流程问题集锦,ASO新手小白必看(上)
|
2天前
|
存储 缓存 算法
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
74 0
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
|
5月前
|
JSON Dart 安全
Flutter App混淆加固、保护与优化原理
在移动应用程序开发中,保护应用程序的代码和数据安全至关重要。本文将探讨如何对Flutter应用程序进行混淆、优化和保护,以提高应用程序的安全性和隐私。
|
测试技术 Android开发 iOS开发
《移动App测试的22条军规》—第1章1.2节移动App的生命周期
对于还处于开发阶段但准备不久之后投入市场的一款新App,鉴于并没有已经实际使用App的用户,所以测试人员要“预测”真实的用户所使用的设备和平台。
1769 0
|
2天前
|
移动开发 小程序
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
|
2天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
112 3
|
2天前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤