gpt4 book ai didi

android - Dalvik 虚拟机占用的大小

转载 作者:太空宇宙 更新时间:2023-11-03 12:59:36 27 4
gpt4 key购买 nike

我试图了解为 Android 中的每个进程分配了多少内存。据我了解,对于每个应用程序进程,都有一个单独的 Zygote 进程实例,Zygote 将 fork Dalvik VM。

我写了一个小的示例 java 应用程序,它只是循环打印“hello world”。后来通过ADB shell调用了Dalvik VM。现在,Procrank 命令显示,

PID Vss Rss Pss Uss cmdline 9374 7556K 7556K 3600K 3384K 达尔维克虚拟机

此处显示的 USS 为 3384k。

后来,我写了一个小的android程序,只有一个activity和TextView。现在procrank显示

PID Vss Rss Pss Uss cmdline 6540 37256K 35124K 4387K 3392K com.example.helloworld

我的问题是:

  1. 如果每个应用程序进程都包含 Dalvik VM,是否会占用更多内存?
  2. 我们怎么知道VM占用的内存大小和Java进程占用的内存大小?

我对Dalvik的理解可能是错误的,它是如何被调用的,VM在每个进程中占用的内存。

欢迎任何见解。

谢谢。

最佳答案

好吧,我等了很长时间,期待专家回答这个问题。让我把我知道的分享给你。

第一个问题的答案:“如果每个应用程序进程都包含 Dalvik VM,它不会占用更多内存吗?”

Dalvik 堆由 zygote 预加载了类和数据(从 Android 2.2 开始加载了 1900 多个类)。当 zygote fork 启动一个 android 应用程序时,新的应用程序会得到这个堆的写时复制映射。正如 Dan Borstein 在下面所说,这有助于减少内存并缩短应用程序启动时间。

它在 Android 中用于分摊与所有 Activity VM 中的公共(public)库类关联的大量有效只读数据(技术上 可写但很少实际写入)的 RAM 占用空间过程。 1000 多个 类在启动时由系统预加载,每个类至少为自己消耗一点堆,包括 经常指向其他对象的星座。由预加载进程创建的堆与每个生成的 VM 进程共享写时复制(但实际上并没有写太多)。这为每个进程节省了 数百 kB 的脏不可分页 RAM,还有助于加快进程启动。

对于您的第 2 个问题:“我们如何知道 VM 占用的内存大小和 Java 进程占用的内存大小?”

我不明白“Java 进程占用的大小”是什么意思check有关 dalvik 中内存的清晰链接。

除了 procrank 我们还可以使用 adb shell dumpsys meminfo '你的应用程序包名称' check this link有关 dumpsys 的更多信息。

关于android - Dalvik 虚拟机占用的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13756619/

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