Articles of 垃圾收集

破坏视图(布局)

我现在正在与内存泄漏作斗争。 所以我很好奇是否有任何方法可以手动销毁视图(在活动onDestroy方法中)? 由于父子引用,上下文引用,标记等,整个布局(activity contentView)有点复杂。 GC现在无法收集我的布局。 问题是隐藏在视图结构中……所以find它的唯一方法是尝试破坏叶子视图,因此在某些时候GC会收集根视图并让我知道问题所在的位置。 我的布局结构:ViewFlipper(RelativeLayout,ListView(ViewFlipper(RelativeLayout,RelativeLayout)))

为什么Android垃圾会用Jacksons ObjectMapper收集这么多次?

我的Android应用程序有一个自定义的AsyncTask,可以对一个对象列表进行rest调用。 我正在使用Jackson将我的响应转换为Java,当我通过ObjectMapper.readValue()映射Json时,我看到了大约30个垃圾收集调用。 有趣的是,如果我在第二次,第三次,第四次(通过选择刷新按钮)进行相同的呼叫,则只有一次GC呼叫。 任何想法为什么每次我启动Android应用程序时第一次调用都会发生这种情况? AsyncTask.java doInBackground() { HttpGet request = new HttpGet(url); HttpClientUtil.setJsonAccept(request); HttpResponse response = httpClient.execute(request); HttpEntity responseEntity = new BufferedHttpEntity(response.getEntity()); // Call that garbage collect 30+ times the first exectution ArrayList responseCollection = mapper.readValue(responseEntity.getContent(), new TypeReference<ArrayList>(){}); return responseCollection; } LogCat输出 07-10 11:05:13.484: D/dalvikvm(5518): GC_CONCURRENT freed 497K, 5% free 14030K/14727K, paused 3ms+4ms 07-10 11:05:13.484: […]

dalvik的垃圾收集工具

我正在检测Dalvik VM,并想知道是否有任何工具来分析dalvik中的垃圾收集。 我知道分配跟踪器,但我正在寻找更精细的东西。

Android Eclipse DDMS>堆>原因GC灰显

我无法在Eclipse中的DDMS Perspective下的Heap选项卡中单击Cause GC按钮,因为它是灰色的。 我在OS X上使用ADT v22(Eclipse / Android / ADT包)。我使用的设备是S3。 遵循的步骤:1。从Eclipse部署的应用程序2.在DDMS中选择的进程3.单击堆更新按钮4.打开堆选项卡但原因GC显示为灰色。 我猜这是因为没有数据填充堆选项卡(没有客户端选择,列表中没有对象)。 有谁知道什么可能是错的?

Android:GC_FOR_MALLOC是由漫长的触摸事件引起的?

我一直在阅读并研究touchEvents ,主要是因为我的GC在有长时间的触摸/滑动事件或许多触摸事件时爆炸。 如果我不触摸手机,它就会像我从DDMS执行的前几个GC_EXPLICIT中看到的那样空闲~5个对象。 然后我开始触摸屏幕并四处滑动,对象在13513个对象周围拍摄,实际上导致GC_FOR_MALLOC超过100毫秒。 这是我的简单测试代码,下面是dalvicvm标记的日志。 如果您有解决方法或原因的文档,或者甚至可能只是对此进行另一次深入讨论,我将非常感激! 干杯,祝你好运。 [码] public class testClass extends Activity implements IOnSceneTouchListener{ int numberOfTouches = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); } @Override public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { numberOfTouches++; return false; } } [logcat的] 06-28 15:24:55.317: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 5 objects / 128 bytes in 53ms […]

LibGdx GC_Concurrent正在运行

我有一个游戏运行,但它一直在随机排队。 这让我觉得GC正在运行。 查找代码后,我看到很多GC_CONCURRENT消息,比如4-5秒。 12-04 22:14:22.018: D/dalvikvm(4757): GC_CONCURRENT freed 510K, 7% free 10139K/10823K, paused 4ms+6ms 12-04 22:14:22.288: D/dalvikvm(4757): GC_CONCURRENT freed 497K, 7% free 10139K/10823K, paused 3ms+7ms 12-04 22:14:22.558: D/dalvikvm(4757): GC_CONCURRENT freed 497K, 7% free 10139K/10823K, paused 3ms+6ms 12-04 22:14:22.823: D/dalvikvm(4757): GC_CONCURRENT freed 497K, 7% free 10139K/10823K, paused 3ms+7ms 我把我的罪魁祸首缩小到我的渲染类。 我刚学习LibGdx(这是我的第一个LibGdx应用程序),并想知道是否有人能看到问题。 public void render(){ batch.begin(); //Draw background […]

android缓存>内部存储与对象缓存

我需要从网络缓存图像(仅5或最多100)并显示在列表视图中。 如果用户选择列表视图的一行,则可以清除缓存。 我看了几个例子。 有些人使用外部存储。 一些使用内部和外部。 一些对象.. 那么内部存储的优点/缺点是什么( http://developer.android.com/guide/topics/data/data-storage.html#filesInternal通过getCacheDir())和对象缓存(类似于WeakHashMap或HashMap <String) ,SoftReference )? 软引用的一个问题似乎是它们可能得到的速度太快( SoftReference太早收集垃圾 )。 android内部存储怎么样? 引用sais“这些文件将在设备运行不足时首先被删除。” 使用对象缓存或临时内部存储会有什么不同吗? 除了对象缓存应该更快一点

Android解除分配Bitmaps进入“未知”内存

我正在制作一个草图应用程序,主要是为了好玩。 但我遇到了一个问题。 在我的应用程序中,用户可以“翻转”他们已经绘制的草图。 这些草图只是400×800位图。 但我经常遇到内存不足的错误。 一旦用户从它们中翻转,草图就会保存到SD,然后将它们释放出来…… if(bitmap != null) { bitmap.recycle(); bitmap = null; } 因此,在保存和取消分配之前,在任何给定时间只应将一个或两个位图加载到内存中。 通过一些调试打印,我已经确定这是真的(同时内存中最多两个位图)。 我的问题是,在14次加载/解除分配后,程序崩溃并出现OutOfMemoryError。 无论我在“翻转”之间等待多久,总是14岁。 我尝试打开DDMS来查看设备的内存分配情况。 奇怪的是,每次取消分配图像时,内存都会转到“未知”部分,而不是“自由”部分。 这种情况一直持续到只留下一小段“空闲”内存,此时发生崩溃(并且“未知”内存变为“空闲”)。 经过大量的谷歌搜索后,我发现了一些资源,说明应该按预期释放位图,并且Dalvik垃圾收集总是在内存不足错误之前发生 。 还有一些杂项页面表明Bitmap使用的所有内存都在GC上解除分配(本机和JVM堆相似) 在这一点上,我应该注意,我正在测试两种不同的手机。 摩托罗拉Droid X(股票图像,Android 2.3.3)和三星Galaxy S3(Cyanogenmod 9,Android 4.0.4)。 两者都表现出完全相同的行为。 我的android工具是所有SDK版本的最新版本,我已经检查了一百万次,以确保我的代码中没有其他任何东西做任何奇怪的分配(几乎没有在程序启动后分配)。 那么 ,我应该如何正确地释放一个Bitmap以便它被释放(而不仅仅是“未知”),并且我可以在其他地方使用内存? 作为一种补充问题,这个“未知”的内存池是什么,它的用途是什么? 编辑:语法和拼写,在平台上添加了一些注释。

背景部分并发标记扫描GC

我正在使用Kotlin Fuel框架来进行REST API调用。 实际上,只要api有http uri,一切都运行良好。 但是,当uris作为具有SSL证书安装的HTTP制作时,我无法从亚马逊服务器下载图像。 我收到以下错误并阻止了UI。 有没有人知道如何解决这个问题? 11-11 12:26:34.865 5060-5071/? I/art: Background partial concurrent mark sweep GC freed 39770(1365KB) AllocSpace objects, 2(136KB) LOS objects, 39% free, 4MB/7MB, paused 10ms total 10ms 11-11 12:26:43.525 5060-5071/? I/art: Background sticky concurrent mark sweep GC freed 111790(2MB) AllocSpace objects, 0(0B) LOS objects, 25% free, 7MB/9MB, paused 10ms total […]

Androidmultithreading – 将应用程序发送到后台后WaitForGcToComplete

我正在使用Android L进行一些大量的multithreading操作,使用多个ThreadPoolExecutors来运行AsyncTasks的队列。 当我的应用程序进入后台时,我开始看到许多日志… I/art: WaitForGcToComplete blocked for ##.#####ms for cause XXXXX ……偶尔…… I/art: No such thread id for suspend: ### 。 很明显,正在发生的事情使GC需要比预期更长的时间。 日志由AOSP中的art / runtime / gc / heap.cc生成。 辅助日志消息表明它可能与我的线程池有关。 不清楚的是,当应用程序发送到后台时,这只会发生(即记录)。 由于这个原因,我还没有看到任何崩溃,但我还有更多的测试要经历。 有没有人遇到与这些日志一致的问题?