gpt4 book ai didi

android - Android L 与 Kitkat 中的 RAM 使用情况

转载 作者:太空狗 更新时间:2023-10-29 16:16:03 24 4
gpt4 key购买 nike

这是我在分析我们的 android jar 在 lollipop 中的兼容性时发现的一个奇怪的问题。我是 android 的新手。我写了一个简单的应用程序,它有一个屏幕和一个按钮,当按下按钮时,它调用jar 中的方法来执行一些服务器调用。我使用 adb 命令来分析应用程序的内存占用,

adb shell dumpsys meminfo <package_name>

这是 kitkat 中的占用空间,(我没有添加其余行,因为我们只关心占用空间中 dalvik 堆的私有(private)脏列,因为那是专门为应用程序分配的 RAM包括我们自己的分配。)

** MEMINFO in pid 876 [XXXXX] **

Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 3054 3032 0 0 6208 5733 178
Dalvik Heap 4338 4012 0 0 12756 11514 1242

这是 Lollipop 中的足迹,

** MEMINFO in pid 201 [XXXX] **

Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 3412 3360 0 0 5572 5236 335
Dalvik Heap 10359 10132 0 0 18762 11338 7424

如果比较两者私有(private)脏列中的 dalvik 堆,kitkat 使用大约 4MB 的 RAM,而 lollipop 使用大约 10MB 的 RAM。它是在两个操作系统中执行的相同应用程序,并且差异巨大。

基于此的几个问题,

  1. 你们有没有人在 Lollipop 中看到这种内存消耗增加的情况?
  2. 知道为什么 Lollipop 中的 RAM 使用率更高吗?
  3. 是否有可视化应用程序 RAM 分配的工具?

PS: 我在 lollipop 中获取了应用程序的堆转储,我可以看到 android.res.Resources 系统类对象使用了 4.4 MB 的内存。我不知道这些资源对象可能是什么,因为应用程序和 jar 都没有静态资源。

最佳答案

Android Lollipop 在 Kitkat 的情况下内置了 ART(Android 运行时)虚拟机而不是 Dalvik 虚拟机。 ART 将应用程序的字节码转换为稍后由设备的运行时环境执行的 native 指令。ART 的工作原理是提前编译 (AOT) 并在应用程序安装期间保存编译的类,而 Dalvik 的工作原理是 Just及时 (JIT) 编译并在应用程序存在后清除已编译类的缓存,并在启动应用程序的新实例时重新编译每个类。

Any idea why is the RAM usage is higher in lollipop?

保持与现有应用的向后兼容性。 ART 使用与 Dalvik 相同的输入字节码,通过标准 .dex 文件作为 APK 文件的一部分提供,而 .odex 文件替换为可执行和可链接格式 (ELF) 可执行文件。使用 ART 的设备上 dex2oat 实用程序编译应用程序后,它仅从编译的 ELF 可执行文件运行;这种方法消除了JIT编译的各种开销,但在安装应用程序时需要额外的编译时间,并且应用程序占用稍大的空间来存储编译后的代码。

enter image description here

Is there a tool to visualize the RAM allocations of the app?.

cat/proc/meminfo - 这将给出一些内存统计信息。如果您添加“memfree + cached”,您将获得总可用内存。dumpsys meminfo-这将为所有当前进程提供内存信息dumpsys meminfo - 为特定进程转储。

除此之外,您还可以使用 Eclipse MAT 插件来分析 JVM 堆内容。

关于android - Android L 与 Kitkat 中的 RAM 使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27617525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com