首页 > 解决方案 > 如何减少Android进程中/dev/ashmem/dalvik-main空间(区域空间)的大小?

问题描述

当我在不同的 Android 版本设备上运行同一个应用程序时,我发现在 Android 8.1 上/dev/ashmem/dalvik-main 空间(区域空间)的虚拟内存为 1GB(如下所示,大小:1048576 kB)。 0,太大了。但在 Android 7.1.2 上,大约为 0.375GB(2116kB + 194492kB + 196608kB)。如何在 Android 8.1.0 上减少它?

在安卓 8.1.0 上

S102X_32:/proc/30015 # cat smaps                                                                                                                                                                                                                                                                                             
12c00000-52c00000 rw-p 00000000 00:01 14821      /dev/ashmem/dalvik-main space (region space) (deleted)
Size:            1048576 kB
Rss:                 664 kB
Pss:                 550 kB
Shared_Clean:          0 kB
Shared_Dirty:        228 kB
Private_Clean:         0 kB
Private_Dirty:       436 kB
Referenced:          436 kB
Anonymous:           664 kB
AnonHugePages:         0 kB
Swap:               1980 kB
SwapPss:             990 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: rd wr mr mw me ac 



在 Android 7.1.2 上

translator:/proc/891 # cat smaps                                                                                                                                                                                                                                                                                             
12c00000-12e11000 ---p 00000000 00:01 19060                              /dev/ashmem/dalvik-main space (deleted)
Size:               2116 kB
Rss:                   0 kB
Pss:                   0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         0 kB
Referenced:            0 kB
Anonymous:             0 kB
AnonHugePages:         0 kB
Swap:                  0 kB
SwapPss:               0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: mr mw me ac 
12e11000-1ec00000 ---p 00211000 00:01 19060                              /dev/ashmem/dalvik-main space (deleted)
Size:             194492 kB
Rss:                   0 kB
Pss:                   0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         0 kB
Referenced:            0 kB
Anonymous:             0 kB
AnonHugePages:         0 kB
Swap:                  0 kB
SwapPss:               0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: mr mw me ac 
32c00000-3ec00000 rw-p 00000000 00:01 19061                              /dev/ashmem/dalvik-main space 1 (deleted)
Size:             196608 kB
Rss:                 416 kB
Pss:                 416 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:       416 kB
Referenced:          416 kB
Anonymous:           416 kB
AnonHugePages:         0 kB
Swap:                  0 kB
SwapPss:               0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: rd wr mr mw me ac 

标签: androidlinuxvirtual-memory

解决方案


您无法在应用程序端调整它的大小。

内存映射为/dev/ashmem/dalvik-mainART 运行时使用的堆,使用 java/kotlin 创建的所有对象都位于该堆中。由于 ART 运行时是在 zygote 中启动的,它是在 Android 启动时由 init 分叉的,并且所有应用程序在 zygote 中共享相同的艺术运行时,因此除非您是 Android 系统开发人员,否则您无法更改堆大小,然后您可以设置dalvik.vm.heapsizedalvik.vm.heapgrowthlimit较小的尺寸。


推荐阅读