java - 该 fragment 中的 `GC_BEFORE_OOM` 是什么?

标签 java android garbage-collection

什么是GC_BEFORE_OOM这里?我认为这与Java中的垃圾收集有关,但我不知道这里发生了什么。

09-08 15:42:18.568  29597-29597/jp.co.example D/dalvikvm﹕ GC_BEFORE_OOM freed 353K, 22% free 57872K/73443K, paused 35ms, total 36ms
09-08 15:42:18.568  29597-29597/jp.co.example E/dalvikvm-heap﹕ Out of memory on a 640016-byte allocation.
09-08 15:42:18.568  29597-29597/jp.co.example I/dalvikvm﹕ "main" prio=5 tid=1 RUNNABLE
09-08 15:42:18.569  29597-29597/jp.co.example I/dalvikvm﹕ | group="main" sCount=0 dsCount=0 obj=0x40aa3460 self=0xc598e0
09-08 15:42:18.569  29597-29597/jp.co.example I/dalvikvm﹕ | sysTid=29597 nice=0 sched=0/0 cgrp=default handle=1074087304
09-08 15:42:18.569  29597-29597/jp.co.example I/dalvikvm﹕ | schedstat=( 6092879000 2120586000 7353 ) utm=517 stm=92 core=0
09-08 15:42:18.569  29597-29597/jp.co.example I/dalvikvm﹕ at android.graphics.Bitmap.nativeCreate(Native Method)
09-08 15:42:18.570  29597-29597/jp.co.example I/dalvikvm﹕ at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
09-08 15:42:18.570  29597-29597/jp.co.example I/dalvikvm﹕ at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
09-08 15:42:18.570  29597-29597/jp.co.example I/dalvikvm﹕ at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
09-08 15:42:18.570  29597-29597/jp.co.example I/dalvikvm﹕ at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:545)
09-08 15:42:18.570  29597-29597/jp.co.example I/dalvikvm﹕ at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:520)
09-08 15:42:18.571  29597-29597/jp.co.example I/dalvikvm﹕ at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:363)
09-08 15:42:18.571  29597-29597/jp.co.example I/dalvikvm﹕ at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)

我研究过的内容

在此 fragment 中,setBackgroundResource()被多次调用,因此可以说,在这里加载图片显然会导致OutOfMemoryError。似乎还有其他人面临着同样的问题。

因此,我阅读了官方 Android 开发者发布的以下帖子:

我已经尝试过这些,但该帖子没有提到垃圾收集或 GC_BEFORE_OOM在 Android 中。

These methods attempt to allocate memory for the constructed bitmap and therefore can easily result in an OutOfMemory exception.

所以,我的问题是......

  • 什么是GC_BEFORE_OOM上面?
  • 这背后发生了什么?

有人愿意帮忙吗?

最佳答案

OutOfMemoryError 之前的垃圾收集。

在抛出OOM之前,虚拟机将尝试进行垃圾收集并继续运行。如果集合没有释放足够的内存,您会收到 OutOfMemoryError (这就是上面发生的情况)。

关于java - 该 fragment 中的 `GC_BEFORE_OOM` 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32450983/

相关文章:

java - Play 框架表单 (Java)

android - 如何让我的应用仅针对特定网址出现在 Intent 选择器中?

java - 运行不会停止

android - getTheme().applyStyle(...) 多次而不覆盖前一个

javascript - 为什么在函数外部声明变量并在循环中赋值比局部变量使用更多内存?

java - GC Clojure/Java/JVM 内存设置

java - 内部 HSQL 数据库提示特权

java - Spring Data - 从表中获取最后一条记录

java - 使用 JNI、多线程从 Fortran 调用 Java

java - 频繁的 Full GC 且堆为空