关于Android堆内存的设置 [ 已编辑]
选项
将帖子标记为未读
将此主题添加到书签
订阅此主题
订阅此主题的 RSS 提要
高亮显示此贴
打印此贴
通过电子邮件将此主题发送给好友
举报此贴
修改时间 08-30-2010 12:21 AM 上次修改时间: 08-30-2010 10:26 AM
大家都知道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的时候调整堆内存大小,让实际占用率向个百分比靠拢。
分享到:
相关推荐
1. Dalvik/ART堆:这是Android应用运行时内存,存储着Java对象。 2. Native堆:C/C++代码使用的内存区域。 3. 图像缓存:用于存储图片资源,如Bitmap对象。 4. 系统服务和库:Android系统服务和各种库占用的内存。 5...
- **设置堆内存使用目标**:通过`VMRuntime.getRuntime().setTargetHeapUtilization(float newTarget)`方法,可以设置理想的堆内存利用率,使虚拟机在GC时调整堆大小,以保持内存利用率接近设定值。 - **监控内存...
内存dump的结果文件`tmp.txt`包含了设备内存的详细信息,包括但不限于进程状态、内存分配情况、堆信息等。开发者可以使用这些数据来分析应用的内存占用、查找内存泄漏、或者比较不同运行时刻的内存状态。例如,如果...
MAT(Memory Analyzer Tool)是由Eclipse基金会开发的一款强大的Java堆内存分析工具,虽然在Android Studio中内置了内存分析功能,但若需要更深入的内存泄漏检测和性能优化,MAT提供了更为专业的解决方案。...
- **堆内存**:Java对象主要存储在堆中,Android为每个应用分配了一定量的堆内存。 - **垃圾回收(GC)**:Android系统有自动垃圾回收机制,用于回收不再使用的对象,释放内存。 2. **内存溢出原因** - **大对象...
在Android系统中,内存管理是优化应用程序性能和稳定性的重要环节。操作系统作业,特别是模拟内存分配与分区回收,是理解整个系统运行机制的关键。本文将深入探讨Android中的内存分配策略及其在实际操作中的应用。 ...
Android 内存溢出处理 Android 内存溢出处理是 Android 开发中常见的问题之一。...解决 Android 内存溢出处理问题需要从多方面入手,包括优化 Dalvik 虚拟机的堆内存分配、手动干涉 GC 处理、自定义堆内存大小等。
在Android系统中,每个应用都有一个独立的Dalvik/ART虚拟机实例,其最大堆内存通常限制在16MB左右,这对于一些需要处理大量数据或资源的应用来说可能显得不足。 内存溢出(OutOfMemoryError)是Android开发中常见的...
HeapSnap就是专为解决这个问题而设计的一款强大的Android进程堆内存泄露追踪工具。它能帮助开发者深入理解应用的内存状态,及时发现并定位内存泄露问题。 1. **内存泄露的理解**: 内存泄露是指程序在申请内存后,...
- **DDMS(Dalvik Debug Monitor Service)**:这是Android SDK中的一个工具,可以监视和控制正在运行的Dalvik虚拟机实例,包括获取堆内存快照(heap dump)。 - **ProGuard**:一个代码混淆和优化工具,也可以用来...
在Android系统中,内存泄漏是一个严重的问题,它会导致应用程序占用过多的内存,进而影响设备性能,甚至可能导致应用崩溃。理解并有效地分析内存泄漏是每个Android开发者必须掌握的关键技能。 内存泄漏通常发生在...
- **HEAP**:用于监控应用的堆内存使用情况,包括已分配的内存、剩余内存等信息。 - **MEMORY ANALYZER TOOL (MAT)**:一种高级的内存分析工具,可以生成和分析.hprof文件,帮助开发者深入了解内存使用情况。 ###...
主要从5个模块入手: 1 java的GC机制以及Android最大堆内存分配 2 Monitors 3 DDMS/Traceview 4 Mat 5 LeakCanary 6 开发中要注意的点。
6. **ART/Dalvik VM设置**:Android运行时环境(ART或Dalvik)的内存配置也会影响系统性能。了解如何调整垃圾回收器参数、堆大小等对提升性能至关重要。 7. **图形内存管理**:对于全志R16这样的多媒体导向平台,...
- **DDMS(Dalvik Debug Monitor Service)**:早期的Android开发中,DDMS是常用的内存分析工具,提供堆内存快照、线程监控等功能。 - **Android Profiler**:Android Studio集成的性能分析工具,包括内存、CPU、...
Android程序中的对象内存分配主要在Java堆上进行,由Java垃圾回收器(Garbage Collector, GC)负责对象的释放。GC通过有向图的方式来判断对象是否可回收。它将引用关系视为有向边,以线程对象作为起点形成一棵树,...
Android提供了多种工具来帮助开发者进行内存分析,比如Android Studio中的Profiler,它提供了内存的实时使用情况和堆转储分析。通过这些工具,开发者可以查找内存泄漏点,分析内存使用模式,优化内存分配策略。 综...
Android系统将内存分为多个层次,包括Dalvik/ART堆内存、Native堆内存、Ashmem分配的内存以及系统缓存等。每个应用程序都有自己的Dalvik/ART虚拟机实例,负责管理Java对象的内存。此外,Android还提供了用于C/C++...
在Android开发中,防止内存溢出是一个至关重要的任务,因为Android设备的内存资源相对有限,尤其是在Dalvik虚拟机中,其最大堆大小通常只有16MB。本文将深入探讨Android平台上的内存管理机制,以及如何避免内存泄露...