修改android最小堆内存详解手机开发
2023-06-13 09:20:13 时间
[java]
view plain
copy int CWJ_HEAP_SIZE = 10 * 1024 * 1024; //10M的内存 VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
[plain]
view plain
copy static void setCommandLineDefaults() * TODO: base these on a system or application-specific default */ gDvm.heapSizeStart = 2 * 1024 * 1024; // Spec says 16MB; too big for us. gDvm.heapSizeMax = 16 * 1024 * 1024; // Spec says 75% physical mem + gDvm.heapSizeMax = 32 * 1024 * 1024; // Spec says 75% physical mem gDvm.stackSize = kDefaultStackSize;
[plain]
view plain
copy int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) //options[curOpt++].optionString = -verbose:class strcpy(heapsizeOptsBuf, -Xmx ); property_get( dalvik.vm.heapsize , heapsizeOptsBuf+4, 16m ); + property_get( dalvik.vm.heapsize , heapsizeOptsBuf+4, 32m ); //LOGI( Heap size: %s , heapsizeOptsBuf); opt.optionString = heapsizeOptsBuf; mOptions.add(opt);
view plain
copy int CWJ_HEAP_SIZE = 10 * 1024 * 1024; //10M的内存 VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
深层理解,进入andorid源码内部:
当应用程序分配内存时,会调用到dalvik/vm/alloc/HeapSource.c中的 dvmTrackExternalAllocation()方法,继而调用到externalAllocPossible()方法,该方法要求当前堆已使 用的大小(由currentHeapSize和hs- externalBytesAllocated构成)加上我们需要再次分配的内存大小不能超 过堆的最大内存值,如果超过就会报错。
有两个地方决定了一个堆的最大内存:
1)dalvik/vm/Init.c中的
gDvm.heapSizeMax = 16 * 1024 * 1024; // Spec says 75% physical mem
2)frameworks/base/core/jni/AndroidRuntime.cpp中的
property_get( dalvik.vm.heapsize , heapsizeOptsBuf+4, 16m );
因此解决办法就是将默认的16M改大一点。
解决办法:
1. 修改dalvik/vm/Init.c:
[plain]
view plain
copy static void setCommandLineDefaults() * TODO: base these on a system or application-specific default */ gDvm.heapSizeStart = 2 * 1024 * 1024; // Spec says 16MB; too big for us. gDvm.heapSizeMax = 16 * 1024 * 1024; // Spec says 75% physical mem + gDvm.heapSizeMax = 32 * 1024 * 1024; // Spec says 75% physical mem gDvm.stackSize = kDefaultStackSize;
[plain]
view plain
copy int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) //options[curOpt++].optionString = -verbose:class strcpy(heapsizeOptsBuf, -Xmx ); property_get( dalvik.vm.heapsize , heapsizeOptsBuf+4, 16m ); + property_get( dalvik.vm.heapsize , heapsizeOptsBuf+4, 32m ); //LOGI( Heap size: %s , heapsizeOptsBuf); opt.optionString = heapsizeOptsBuf; mOptions.add(opt);
相关文章
- android中的加密算法,Android中加密算法[通俗易懂]
- android 常用加密,分享一下Android各种类型的加密
- android sdk安装过程,图文详解Android 3.0 SDK安装教程
- android 获取收到短信验证码,Android自动获取短信验证码
- android 验证码短信验证码,Android短信验证码倒计时验证的2种常用方式
- android 横向滑动分类效果实现
- android 防止多次点击
- Android 稳定性测试实践
- 【Android 内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitmap 示例 | DiskLruCache 开源库 | 代码示例 )
- 【Android 异步操作】AsyncTask 异步任务 ( 参数简介 | 方法简介 | 使用方法 | AsyncTask 源码分析 )
- 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )
- 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 )
- 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ③ ( 执行 compile-ffmpeg.sh clean 命令 | 下载并配置 android-ndk-r10e )
- 【错误记录】Android Studio 中 Gradle 配置报错 ( Can‘t determine type for tag ‘<item name=““ type=“String“>)
- Android为何比iOS卡论1G内存的使用详解手机开发
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件详解手机开发
- [android] 看博客学习Android常见的几种RuntimeException详解手机开发
- [android] 加载大图片到内存详解手机开发
- android Universal Image Loader for Android 说明文档 (1)详解手机开发
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string ‘android-23’ 等错误详解手机开发
- android如何默认打开小区广播具体实现
- Android从服务器获取图片的实例方法
- android实用工具类分享(获取内存/检查网络/屏幕高度/手机分辨率)