android 应用 heap size分配

理解Android进程内存配置与优化

 

 

android不同设备单个进程可用内存是不一样的,可以查看/system/build.prop文件。

 

# This is a high density device with more memory, so larger vm heaps for it.
dalvik.vm.heapsize=24m

上面heapsize参数表示单个进程可用的最大内存,但如果存在如下参数:

dalvik.vm.heapgrowthlimit=16m

largeheaplimit参数表示单个进程内存被限定在16m,即程序运行过程中实际最大智能使用16MB内存,不过有一个办法可以解决,编辑AndroidManifest.xml中的Application节点,增加属性largeheap="true"参数.

 

这个参数的实现是在:

frameworks\base\core\jni\AndroidRuntime.cpp中的 startVM函数中,语句如下:

    property_get("dalvik.vm.heapsize", heapsizeOptsBuf+4, "64m");
    LOGI("Heap size: %s", heapsizeOptsBuf);
    opt.optionString = heapsizeOptsBuf;
    mOptions.add(opt);

之后mOptions会作为启动VM参数传入。

`heapsize`(堆大小)是指程序在运行时可以使用的**最大堆内存容量**,是 Java/Android 等基于 JVM(Java 虚拟机)环境中非常重要的一个内存参数。 --- ### 📌 堆内存(Heap Memory)简介 堆是 JVM 运行时用于**动态内存分配**的区域,主要用于存放**对象实例(Object instances)**。Java 和 Android 中所有的类实例和数组都是在堆上分配内存的。 - `heapsize` 就是这个堆区域的**最大容量限制**。 - 当程序创建的对象太多或存在内存泄漏时,堆内存不足,就会触发 **GC(垃圾回收)**。 - 如果 GC 后仍无法释放足够内存,程序会抛出 `OutOfMemoryError`。 --- ### 🧮 Android 中的 heapsize 设置 在 Android 中,每个应用默认的 heapsize 是有限的,通常为: | 设备类型 | 默认 heapsize(大致) | |----------|------------------------| | 低端设备 | 16MB - 48MB | | 中端设备 | 96MB - 128MB | | 高端设备 | 192MB - 384MB 或更高 | 你可以通过以下方式查看某个应用heapsize: #### ✅ 在代码中查看(Java / Kotlin): ```java Runtime runtime = Runtime.getRuntime(); long maxMemory = runtime.maxMemory(); // 获取最大堆内存(单位:字节) Log.d("HeapSize", "Max Heap Size: " + (maxMemory / 1024 / 1024) + " MB"); ``` #### ✅ 使用 ADB 命令查看: ```bash adb shell dumpsys meminfo com.example.app ``` --- ### 🚨 heapsize 过小或过大的影响 | 情况 | 影响 | |------|------| | heapsize 过小 | 容易出现内存不足(OOM),频繁 GC,应用卡顿甚至崩溃 | | heapsize 过大 | 占用系统资源过多,可能影响其他应用,甚至被 LowMemoryKiller 杀掉 | --- ### ✅ 如何增大 heapsize(仅限 Android)? 在 `AndroidManifest.xml` 文件中添加 `android:largeHeap="true"` 可请求更大的堆内存: ```xml <application android:largeHeap="true" ... > </application> ``` ⚠️ 注意:这不是推荐做法,应优先优化内存使用,而不是一味增大 heapsize。 --- ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值