堆分配行为怪异-Android
我无法理解这里发生了什么-我一直在创建一个小项目,只是为了了解图像的旋转。但这与此无关 所以-我以前一直在做这件事,并且知道堆是如何工作的,但我知道我不能得到它 在这个小型Eclipse项目中,我在drawable mdpi文件夹中放置了一个图像。图像是堆分配行为怪异-Android,android,eclipse,memory-management,heap-memory,Android,Eclipse,Memory Management,Heap Memory,我无法理解这里发生了什么-我一直在创建一个小项目,只是为了了解图像的旋转。但这与此无关 所以-我以前一直在做这件事,并且知道堆是如何工作的,但我知道我不能得到它 在这个小型Eclipse项目中,我在drawable mdpi文件夹中放置了一个图像。图像是 1300 * 1950 简单地说,这个映像将占用大约以下数量的ram(堆) 红色、绿色、蓝色和阿尔法色。就这样 但是发生了什么。好的,请看下面的日志!!!三星Galaxy S3的63MB内存几乎耗尽 02-17 08:50:05.144:
1300 * 1950
简单地说,这个映像将占用大约以下数量的ram(堆)
红色、绿色、蓝色和阿尔法色。就这样
但是发生了什么。好的,请看下面的日志!!!三星Galaxy S3的63MB内存几乎耗尽
02-17 08:50:05.144: I/dalvikvm-heap(21097): Grow heap (frag case) to 22.494MB for 10140016-byte allocation
02-17 08:50:05.164: D/dalvikvm(21097): GC_CONCURRENT freed 1K, 5% free 22152K/23175K, paused 12ms+2ms, total 22ms
02-17 08:50:05.329: D/dalvikvm(21097): GC_FOR_ALLOC freed 0K, 5% free 22152K/23175K, paused 11ms, total 11ms
02-17 08:50:05.429: I/dalvikvm-heap(21097): Grow heap (frag case) to 61.174MB for 40560016-byte allocation
02-17 08:50:05.449: D/dalvikvm(21097): GC_CONCURRENT freed 0K, 2% free 61761K/62791K, paused 11ms+3ms, total 22ms
02-17 08:50:06.109: D/libEGL(21097): loaded /system/lib/egl/libEGL_mali.so
02-17 08:50:06.119: D/libEGL(21097): loaded /system/lib/egl/libGLESv1_CM_mali.so
02-17 08:50:06.124: D/libEGL(21097): loaded /system/lib/egl/libGLESv2_mali.so
02-17 08:50:06.179: D/(21097): Device driver API match
02-17 08:50:06.179: D/(21097): Device driver API version: 10
02-17 08:50:06.179: D/(21097): User space API version: 10
02-17 08:50:06.179: D/(21097): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Fri Sep 28 10:42:56 KST 2012
02-17 08:50:06.254: D/OpenGLRenderer(21097): Enabling debug mode 0
首先,它正确地分配了内存(根据我的计算,您可以看到10MB)和一个远高于此的堆,即20MB。到现在为止,一直都还不错。但随后它继续分配远远高于该级别的内存。就像有另一个40MB的映像(是前一个映像的4倍)一样,分配的堆最终会达到61MB,几乎耗尽了内存
我错过了什么,还是一只虫子?我已经检查了所有的绘图文件夹,我知道我运行这个应用程序,而不是另一个。我确实重新创建了这个项目,甚至更改了图像名称。重新启动计算机和设备
这是源代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imgview = (ImageView) findViewById(R.id.image);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.image1);
}
xml文件
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
更多信息:设备已根目录
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>