Articles of 垃圾收集

Android – 位图和内存管理?

我在很多样本中看到,开发人员recycle()图上调用recycle() ,然后将其设置为null 。 为什么这是必要的,垃圾收集器是否负责释放位图? Bitmap bitmap = BitmapFactory.decodeStream(inputStream); bitmap.recycle(); bitmap = null;

了解Android GC消息

我的catlog上有以下消息, GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms 我试图理解最后的总价值。 我在网站上检查了其他与GC有关的问题,他们要么有两次暂停与并发GC相关联,要么一次总停顿为非并发GC。 为什么我有两个? 我的应用程序暂停了5 + 9毫秒还是378毫秒? 到底究竟是什么?

在Android中收集原始types的垃圾吗?

我知道这可能是一个愚蠢的问题,但我的背景更多是用c ++和管理自己的记忆。 我目前正在削减我可以从我的一个游戏中尝试减少垃圾收集频率和感知“滞后”的每一个分配,所以我创建的每个variables都是一个Object(例如String和Rect)我我确保我先在构造函数中创建它,而不是在简单的10行函数中创建临时variables…(我希望这是有道理的) 无论如何我今晚工作得更多了,我意识到我对垃圾收集的假设可能完全错了,原始types(int,boolean,float)是我在10行函数中创建的原始typesvariables每秒20次增加我的垃圾收集问题? 所以一年前我每隔几秒就会在logcat中看到一条消息 GC在101ms内释放了4010个对象/ 484064个字节 现在我每隔15-90秒左右看到一条消息…… 所以重新解释我的问题:看到这条消息时是否包含原始types(int,float,boolean等)?

大内存块不是垃圾收集

在我的应用程序寻找内存泄漏时,我追查了一个我无法理解的行为。 我分配了一个大的内存块,但它没有得到垃圾收集导致一个OOM,除非我在onDestroy中显式null引用。 在这个例子中,我有两个几乎相同的活动,可以在彼此之间切换。 两者都有一个按钮。 按下按钮MainActivity通过调用finish()启动OOMActivity和OOMActivity返回。 按几次按钮后,Android会抛出一个OOMException。 如果我将onDestroy添加到OOMActivity并显式null对内存块的引用,我可以在日志中看到内存被正确释放。 为什么没有归零就不会自动释放内存? 主要活动: package com.example.oom; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { private int buttonId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.gc(); Button OOMButton = new Button(this); OOMButton.setText(“OOM”); buttonId = OOMButton.getId(); setContentView(OOMButton); OOMButton.setOnClickListener(this); } @Override […]

GcWatcher.finalize在10秒后超时

这个例外的原因是什么? 我有一个活动,其中运行的video很少。 感到困惑。 请帮忙。 06-15 11:00:33.775 E/AndroidRuntime(11757): FATAL EXCEPTION: FinalizerWatchdogDaemon 06-15 11:00:33.775 E/AndroidRuntime(11757): java.util.concurrent.TimeoutException: com.android.internal.os.BinderInternal$GcWatcher.finalize() timed out after 10 seconds 06-15 11:00:33.775 E/AndroidRuntime(11757): at java.lang.Object.wait(Native Method) 06-15 11:00:33.775 E/AndroidRuntime(11757): at java.lang.Object.wait(Object.java:401) 06-15 11:00:33.775 E/AndroidRuntime(11757): at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:102) 06-15 11:00:33.775 E/AndroidRuntime(11757): at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:73) 06-15 11:00:33.775 E/AndroidRuntime(11757): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170) 06-15 11:00:33.775 E/AndroidRuntime(11757): at java.lang.Thread.run(Thread.java:856)

Android GridView垃圾收集(GC_EXTERNAL_ALLOC)<1K过度使用,导致UI非常不稳定

我一直在看这个很长一段时间,最后决定发布 – 我的2xN GridView,它由单个图像和一段文字组成的单元格很多次都很不稳定(但有时非常流畅)。 在检查logcat输出后,一旦我开始滚动,我就会看到这样的事情(列表中只有12个项目): 10-25 17:28:40.420: D/dalvikvm(12159): GC_EXTERNAL_ALLOC freed 6K, 47% free 3383K/6279K, external 2044K/2161K, paused 38ms 10-25 17:28:40.510: D/dalvikvm(12159): GC_EXTERNAL_ALLOC freed <1K, 47% free 3383K/6279K, external 2044K/2161K, paused 36ms 10-25 17:28:40.600: D/dalvikvm(12159): GC_EXTERNAL_ALLOC freed <1K, 47% free 3383K/6279K, external 2044K/2161K, paused 40ms 10-25 17:28:41.805: D/dalvikvm(12159): GC_EXTERNAL_ALLOC freed 1K, 47% free 3383K/6279K, external 2044K/2161K, […]

android – GC_FOR_ALLOC释放6346K,7%免费,暂停143ms,总计143ms

我正在使用OSMdroid库开发一个离线mapView。 我的tilesource加载了tile,但渲染稳定。 但事实是在我的日志消息中,我不断收到此错误: GC_FOR_ALLOC freed 6346K, 7% free , paused 143ms, total 143ms 我不确定如何调试这个? 任何想法,我有任何内存泄漏?

Android ClassLoader内存泄漏

动机: 我在我的Android应用程序中使用了一些本机库,我想在某个时间点从内存中卸载它们。 当加载了加载本机库的类的ClassLoader被垃圾收集时,库将被卸载。 灵感: 原生卸货 。 问题: 如果ClassLoader用于加载某个类(导致可能的内存泄漏),则不会对其进行垃圾回收。 本机库只能在应用程序中的一个ClassLoader中加载。 如果仍有旧的ClassLoader挂在内存中的某个位置,并且新的ClassLoader尝试在某个时间点加载相同的本机库,则会抛出exception。 题: 如何以干净的方式执行本机库的卸载(卸载是我的最终目标,无论它是一种糟糕的编程技术还是类似的东西)。 为什么会出现内存泄漏以及如何避免内存泄漏? 在下面的代码中,我通过省略本机库加载代码来简化案例,只演示了Classloader内存泄漏。 我在Android KitKat 4.4.2,API 19上测试了它。设备:Motorola Moto G. 为了演示,我有以下ClassLoader,派生自用于加载Android应用程序的PathClassLoader 。 package com.demo; import android.util.Log; import dalvik.system.PathClassLoader; public class LibClassLoader extends PathClassLoader { private static final String THIS_FILE=”LibClassLoader”; public LibClassLoader(String dexPath, String libraryPath, ClassLoader parent) { super(dexPath, libraryPath, parent); } @Override protected void finalize() […]

Android GC内存碎片失败。 解决方法?

我正在测试android 3.1,大堆大小的选项,大约250M的内存可用。 每当我点击应用程序首选项中的“测试”按钮时,我都会设置以下代码: float [][][]foo = new float[3][2048][2048]; Bitmap bm = Bitmap.createBitmap(2048, 2048, Bitmap.Config.ARGB_8888); bm.recycle(); bm = null; foo = null; 我有足够的记忆 – 我可以毫无问题地按几下按钮。 但是,如果我一直按下按钮,最终(少于20次点击)它会与OutOfMemory一起消失。 [通常在android.graphics.Bitmap.nativeCreate(Native Method)中] 没有其他事情发生 – 我永远不必离开PreferencesActivity。 当我按下按钮时,还会显示一个小Toast,因此正在进行少量其他UI活动。 这是由于碎片,还是Android Bitmap代码和/或GC中的一个可怕的错误? 或者我只是在做一些愚蠢的事情? (请让它成为愚蠢的……) 有人有解决方法吗? 因为上面的代码完全代表了我的代码每次用户调用它时所要做的事情,而且现在尽管细致地清除了variables,但它在几次使用后就会消失。 (这已经让我疯了很久了!) [更新] 我已经确认这是一个碎片问题或gc错误,因为堆转储显示我在处理期间闲置(无泄漏)时仅使用5.6M达到峰值约26M。 (此外,本机堆保持在4M以下。)虽然java堆同时在我的测试设备上一直增长到280M限制,此时我开始获得OutOfMemoryexception。 所以我只在峰值时使用了10%的可用堆,但是获得OutOfMemory。 [不幸的是,添加对System.gc()的调用修复了我上面给出的简单测试用例。 我说不幸,因为(A)它不应该有所作为,(B)因为我已经在我的真实代码中定期调用它,所以这意味着我上面的简单测试用例太简单了。 有没有其他人遇到这个? 有任何变通方法吗? 有没有一种优雅的方式来重新启动我的应用程序? [更新] 以下版本可以在3到4次调用中可靠地导致OutOfMemory(按下按钮): float [][][]foo = new float[3][2048][2048]; Bitmap […]

java.lang.OutOfMemoryError:Android 1.4上超出了GC开销限制

我得到一个java.lang.OutOfMemoryError:在Android 1.4上运行gradle时超出了GC开销限制 …这些是我的依赖: dependencies { compile project(‘:android-crop’) compile project(‘:RTEditor-Toolbar’) compile files(‘libs/apache-mime4j-0.6.jar’) compile files(‘libs/httpmime-4.1.3.jar’) /* compile files(‘libs/httpcore-4.4.1.jar’)*/ compile files(‘libs/jetbrains-annotations.jar’) compile files(‘libs/pinchzoom.jar’) compile files(‘libs/gcm.jar’) compile ‘com.google.android.gms:play-services:7.8.0’ compile ‘com.android.support:multidex:1.0.0’ compile ‘com.android.support:appcompat-v7:22.2.1’ compile ‘com.android.support:cardview-v7:22.2.1’ compile ‘com.android.support:design:22.2.1’ compile ‘com.android.support:recyclerview-v7:22.2.1’ compile ‘com.android.support:support-v4:22.2.1’ //three party library compile ‘com.squareup.picasso:picasso:2.5.2’ compile ‘com.mcxiaoke.volley:library:1.0.18’ compile ‘com.vinaysshenoy:mugen:1.0.1’ compile ‘com.github.clans:fab:1.5.5’ compile ‘com.nineoldandroids:library:2.4.0’ compile ‘com.github.curioustechizen.android-ago:library:1.3.0’ compile ‘com.squareup.okio:okio:1.5.0’ compile ‘com.squareup.okhttp:okhttp:2.4.0’ […]