生活随笔
收集整理的這篇文章主要介紹了
如何修改Android应用程序能够使用的默认最大内存值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何修改Android應用程序能夠使用的默認最大內存值 參考: Android Bitmap內存限制OOM,Out Of Memory 分析: 當應用程序分配內存時,會調用到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: 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; ?
2. 修改frameworks/base/core/jni/AndroidRuntime.cpp: 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 Bitmap內存限制OOM,Out Of Memory 分析: 當應用程序分配內存時,會調用到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: 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; ?
2. 修改frameworks/base/core/jni/AndroidRuntime.cpp: 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应用程序能够使用的默认最大内存值 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。