-
Android Heap 利用率过低,导致OOM的问题5
最近遇到一个做一个app的时候遇到了一个OOM问题。做了个hello word模拟当时的情况。public class AndoirHeapTestActivity extends Activity { /** Called when the activity is first created. */ private Button btn, btn2; private ArrayList<int[]> myArray = new ArrayList<int[]>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(myClickListener); btn2 = (Button) findViewById(R.id.button2); btn2.setOnClickListener(myClickListener); } private OnClickListener myClickListener = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(v == btn){ int[] intArray = new int[1024 * 1024 / 4]; myArray.add(intArray); }else { myArray.clear(); System.gc(); } } }; }
当点多次新建内存快后,点释放。DDMS heap工具里看到出现如下图的情况
heapSize值一直很高,但实际用到的内存却不多,内存利用率很低,多余的内存无法被系统回收。
这就造成了一个发生OOM的隐患,当heapSize到32M的时候,就出现OOM。
请问怎么能让利用率低的时候让系统回收多余的内存??
VM好像是保持利用率在80%左右,但android里davik怎么这个就不管用??焦虑啊
2012年6月07日 22:18
目前还没有答案
相关推荐
在Android开发中,图片的加载和内存管理是一个关键问题,特别是考虑到防止因内存溢出(Out Of Memory,简称OOM)而导致应用崩溃。本教程将详细探讨如何在Android中有效地进行图片下载和内存处理,以避免OOM的发生。 ...
在 Android 开发中,加载大图片是一个常见的问题,这可能会引发 OOM(Out of Memory)异常。OOM 异常是指应用程序试图分配超过系统可用内存的内存空间,从而导致应用程序崩溃。为了解决这个问题,开发者需要了解 ...
SpringBoot 中 @Async 默认线程池导致 OOM 问题 在 SpringBoot 中使用 @Async 注解来实现异步操作是一种非常常见的做法,但是如果不小心,可能会导致 OOM(Out of Memory)问题。本文将详细介绍 SpringBoot 中 @...
1. **Bitmap对象过大**:在处理图片时,如果加载的图片太大或者创建的Bitmap对象占用的内存超过了限制,就会导致OOM。例如,当尝试加载一张大尺寸的图片到内存中时,如果没有适当调整其大小或使用高效的压缩策略,很...
而在1.6.0及更高版本,Execution和Storage内存可以互相借用,提高了内存利用率,减少了OOM的发生。 此外,从Spark 1.6.0开始引入了堆外内存,这是一种不在JVM堆上分配的内存,不受GC影响,适合存储大对象。堆外内存...
OOM 的原因可以分为两种情况,一种是物理内存确实有限,另一种是应用系统本身对资源的不恰当使用、配置,引起内存使用持续增加,最终导致 JVM Heap Memory 被耗尽。 在我们的项目案例中,我们首先通过对底层封装的...
在Android开发过程中,"Out Of Memory"(OOM)错误是一个常见的问题,特别是在处理大量数据、图像或者长时间运行的任务时。这个错误表示应用程序消耗了过多的内存,超过了系统分配的限制,导致系统无法再为该应用...
Android hprof 自动化dump heap脚本 MAC 上执行脚本: pid 为 app 的进程 id sh ./djheap.sh [packageName] [pid] 导出 hprof 文件可以用 mat 工具进行分析
另外,虽然可以尝试修改源代码如`AndroidRuntime.cpp`或`dalvik/vm/Init.c`来调整默认的堆大小,但这通常不推荐,因为可能会导致稳定性问题。 内存指标是衡量应用内存使用情况的重要参考。ActivityManager提供的`...
Linux和Android内核的Heap Spray技术是一种常见的攻击技术,它主要利用了内存管理中的一些漏洞,通过在内存中喷射大量的数据,来覆盖特定的内存地址,从而达到获取系统权限等目的。 首先,我们需要对Linux和Android...
要生成heapdump,可以使用JVM内置的命令行选项,例如`-XX:+HeapDumpOnOutOfMemoryError`来配置JVM,在出现OOM错误时自动创建heapdump,或者使用`jmap`工具(需要与JDK配套)手动触发dump: ```bash jmap -dump:...
Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...
当应用程序出现Out of Memory (OOM)错误时,通常意味着系统无法分配足够的内存来执行任务,这时就需要借助专业的分析工具来查找问题的根源。MemoryAnalyzer(MAT)是IBM开发的一款强大的JVM堆内存分析工具,它能够...
IBM HeapAnalyzer是一款强大的Java Out-of-Memory (OOM) 分析工具,主要用于诊断和解决Java应用程序在运行时出现的内存问题。IBM开发此工具是为了帮助Java开发者深入理解内存使用情况,定位内存泄漏或不当的内存分配...
它能帮助开发者深入理解Java虚拟机(JVM)的堆内存状态,通过分析heap dump文件,找出那些占用内存过大的对象,以及这些对象的引用路径,从而定位可能导致问题的代码。 Heap dump是在JVM运行时捕获的一份内存快照,...
1.打开Android调试开关(需要userdebug版本) setenforce 0 setprop libc.debug.malloc 1 setprop libc.debug.malloc.options backtrace stop;start 2.获取进程pdi ps -ef | grep "app or service" 3.抓取步骤2进程的...
2. **最大堆大小限制**:如果应用程序的内存需求超过JVM的最大堆大小设置,也会导致heap space问题。 3. **内存泄漏**:程序中存在未被及时回收的不再使用的对象,长期占用内存资源,最终导致可用堆内存耗尽。 ####...
内存泄露是Java应用程序中常见的问题,它会导致程序性能下降,甚至最终引发`java/lang/OutOfMemoryError`。IBM HeapAnalyzer和Pattern Modeling and Analysis (PMA)是两种强大的工具,专门用于诊断和解决这类问题。 ...