`
crazier9527
  • 浏览: 1013398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Android堆内存的设置(转)

阅读更多

大家都知道Android的上层应用是基于 Dalvik Virtual Machine的。Dalvik VM的特点是基于寄存器,相比SUN的JVM(基于堆栈,没有寄存器)来说,理论上完成同样的功能需要的指令条数少,但是指令集复杂。到了Android2.2,Dalvik终于实现了JIT(Just In Time)功能,前进了一大步。

 

近期我们遇到OutOfMemory的错误,通常是堆内存溢出。网上有些帖子说可以通过函数设置应用的HEAP SIZE来解决这个问题,其实是不对的。

 

 

VMRuntime.getRuntime().setMinimumHeapSize(NewSize);

 

堆(HEAP)是VM中占用内存最多的部分,通常是动态分配的。堆的大小不是一成不变的,通常有一个分配机制来控制它的大小。比如初始的HEAP是4M大,当4M的空间被占用超过75%的时候,重新分配堆为8M大;当8M被占用超过75%,分配堆为16M大。倒过来,当16M的堆利用不足30%的时候,缩减它的大小为8M大。重新设置堆的大小,尤其是压缩,一般会涉及到内存的拷贝,所以变更堆的大小对效率有不良影响。

 

上面只是个例子,不过可以看到三个参数:max heap size, min heap size, heap utilization(堆利用率)。

 

Max Heap Size,是堆内存的上限值,Android的缺省值是16M(某些机型是24M),对于普通应用这是不能改的。函数setMinimumHeapSize其实只是改变了堆的下限值,它可以防止过于频繁的堆内存分配,当设置最小堆内存大小超过上限值时仍然采用堆的上限值,对于内存不足没什么作用。

 

setTargetHeapUtilization(float newTarget) 可以设定内存利用率的百分比,当实际的利用率偏离这个百分比的时候,虚拟机会在GC的时候调整堆内存大小,让实际占用率向个百分比靠拢。

 

转自:http://community-china.developer.motorola.com/t5/%E4%B8%BA%E6%91%A9%E6%89%98%E7%BD%97%E6%8B%89%E6%89%8B%E6%9C%BA%E5%BC%80%E5%8F%91Android%E5%BA%94%E7%94%A8/%E5%85%B3%E4%BA%8EAndroid%E5%A0%86%E5%86%85%E5%AD%98%E7%9A%84%E8%AE%BE%E7%BD%AE/m-p/407;jsessionid=9CBF36F10C7FEEB31E7CB6282E8F04E6

分享到:
评论

相关推荐

    android应用内存监控工具

    1. Dalvik/ART堆:这是Android应用运行时内存,存储着Java对象。 2. Native堆:C/C++代码使用的内存区域。 3. 图像缓存:用于存储图片资源,如Bitmap对象。 4. 系统服务和库:Android系统服务和各种库占用的内存。 5...

    Android 内存溢出问题

    - **设置堆内存使用目标**:通过`VMRuntime.getRuntime().setTargetHeapUtilization(float newTarget)`方法,可以设置理想的堆内存利用率,使虚拟机在GC时调整堆大小,以保持内存利用率接近设定值。 - **监控内存...

    M8 android dump内存工具

    内存dump的结果文件`tmp.txt`包含了设备内存的详细信息,包括但不限于进程状态、内存分配情况、堆信息等。开发者可以使用这些数据来分析应用的内存占用、查找内存泄漏、或者比较不同运行时刻的内存状态。例如,如果...

    Android MAT 内存分析 工具

    MAT(Memory Analyzer Tool)是由Eclipse基金会开发的一款强大的Java堆内存分析工具,虽然在Android Studio中内置了内存分析功能,但若需要更深入的内存泄漏检测和性能优化,MAT提供了更为专业的解决方案。...

    Android防止内存溢出浅析.zip

    - **堆内存**:Java对象主要存储在堆中,Android为每个应用分配了一定量的堆内存。 - **垃圾回收(GC)**:Android系统有自动垃圾回收机制,用于回收不再使用的对象,释放内存。 2. **内存溢出原因** - **大对象...

    android模拟内存分配

    在Android系统中,内存管理是优化应用程序性能和稳定性的重要环节。操作系统作业,特别是模拟内存分配与分区回收,是理解整个系统运行机制的关键。本文将深入探讨Android中的内存分配策略及其在实际操作中的应用。 ...

    android_内存溢出处理

    Android 内存溢出处理 Android 内存溢出处理是 Android 开发中常见的问题之一。...解决 Android 内存溢出处理问题需要从多方面入手,包括优化 Dalvik 虚拟机的堆内存分配、手动干涉 GC 处理、自定义堆内存大小等。

    Android的内存机制和溢出说明

    在Android系统中,每个应用都有一个独立的Dalvik/ART虚拟机实例,其最大堆内存通常限制在16MB左右,这对于一些需要处理大量数据或资源的应用来说可能显得不足。 内存溢出(OutOfMemoryError)是Android开发中常见的...

    android内存泄露测试

    - **DDMS(Dalvik Debug Monitor Service)**:这是Android SDK中的一个工具,可以监视和控制正在运行的Dalvik虚拟机实例,包括获取堆内存快照(heap dump)。 - **ProGuard**:一个代码混淆和优化工具,也可以用来...

    Android-HeapSnap是一款针对Android进程堆内存泄露追踪工具

    HeapSnap就是专为解决这个问题而设计的一款强大的Android进程堆内存泄露追踪工具。它能帮助开发者深入理解应用的内存状态,及时发现并定位内存泄露问题。 1. **内存泄露的理解**: 内存泄露是指程序在申请内存后,...

    android系统分析内存泄露测试

    在Android系统中,内存泄漏是一个严重的问题,它会导致应用程序占用过多的内存,进而影响设备性能,甚至可能导致应用崩溃。理解并有效地分析内存泄漏是每个Android开发者必须掌握的关键技能。 内存泄漏通常发生在...

    Android内存管理小结

    - **HEAP**:用于监控应用的堆内存使用情况,包括已分配的内存、剩余内存等信息。 - **MEMORY ANALYZER TOOL (MAT)**:一种高级的内存分析工具,可以生成和分析.hprof文件,帮助开发者深入了解内存使用情况。 ###...

    android内存分析工具集锦

    主要从5个模块入手: 1 java的GC机制以及Android最大堆内存分配 2 Monitors 3 DDMS/Traceview 4 Mat 5 LeakCanary 6 开发中要注意的点。

    R16 Android方案内存配置说明_android_全志R16_

    6. **ART/Dalvik VM设置**:Android运行时环境(ART或Dalvik)的内存配置也会影响系统性能。了解如何调整垃圾回收器参数、堆大小等对提升性能至关重要。 7. **图形内存管理**:对于全志R16这样的多媒体导向平台,...

    android 内存分析工具

    - **DDMS(Dalvik Debug Monitor Service)**:早期的Android开发中,DDMS是常用的内存分析工具,提供堆内存快照、线程监控等功能。 - **Android Profiler**:Android Studio集成的性能分析工具,包括内存、CPU、...

    android内存分析

    Android程序中的对象内存分配主要在Java堆上进行,由Java垃圾回收器(Garbage Collector, GC)负责对象的释放。GC通过有向图的方式来判断对象是否可回收。它将引用关系视为有向边,以线程对象作为起点形成一棵树,...

    Android-一个卡片堆叠显示效果的Android自定义视图

    总之,创建一个卡片堆叠显示效果的Android自定义视图涉及到动画处理、布局管理、事件监听等多个方面,需要对Android UI框架有深入理解。通过学习和实践,开发者可以创造出更加富有创新和吸引力的用户界面。

    胡凯 - Android内存优化之5R法则

    Android提供了多种工具来帮助开发者进行内存分析,比如Android Studio中的Profiler,它提供了内存的实时使用情况和堆转储分析。通过这些工具,开发者可以查找内存泄漏点,分析内存使用模式,优化内存分配策略。 综...

    android 7.1 获取各个应用的各种内存信息的app demo

    Android系统将内存分为多个层次,包括Dalvik/ART堆内存、Native堆内存、Ashmem分配的内存以及系统缓存等。每个应用程序都有自己的Dalvik/ART虚拟机实例,负责管理Java对象的内存。此外,Android还提供了用于C/C++...

Global site tag (gtag.js) - Google Analytics