Articles of 垃圾收集

我如何停止Android垃圾收集器? 可能吗?

有没有什么办法停止垃圾收集器一段时间?

WeakReference#get()何时开始返回null?

我想使用WeakReference s作为(android)位图caching的一部分,以便能够检查何时不再使用位图。 我的caching的最大尺寸比Java堆空间小。 当一个新的位图会溢出caching时,它应该放弃不再需要的位图。 我的问题:什么时候WeakReference的get()方法返回null? 只要没有更强的对象的引用? (并且GC还没有发生) 或者当GC运行并确定它们没有更强的对象的引用? 如果2.是真的比我可能遇到的情况,我的caching可以填补和GC最近没有运行的原因。 然后,即使我在上次GC运行后已经放弃了引用, WeakReference#get()仍然会返回该对象,并且我的caching不会将其清除。

通过XML创build的UI对象在Android Marshmallow中不会被扫描

我正在为一些硬件移植android棉花糖。 我面临的问题是,如果我通过xml创build一个UI对象,它不会被GC扫描。 例如: 我已经创build了一个应用程序来检查这个。 这个程序有2个活动。 每个活动都有一个button。 如果我按下这个button,它完成当前的活动,并开始其他活动。 如果我在xml布局和活动setcontentview中定义一个button,它将创build一个types为button的对象。 现在我一次又一次地切换这些活动来创buildbutton的多个对象,因为我没有使用任何LAUNCH_MODE(故意)。 现在让我们说button的8个对象已经被创build。 我多次按下button,回到主屏幕。 我从Android Studio启动了GC。 之后,如果我采取堆转储,我仍然find8个button的实例,但“对象的id被改变”。 而且,我看到Button类的构造函数在启动GC后没有被调用。 那么是谁创造了这些对象。 如果这些是相同的对象,为什么ids已经改变了。 同样的事情,如果我通过使用Button类创buildButton对象, 像Button b = new Button(Context c); 对象正在被扫荡。 如果你明白这个问题,请说明一下。 BR,拉胡尔

垃圾收集器可以释放单例实例吗? (以及为什么或如何避免)

在Android我有singleton类,但我不知道如果垃圾收集器可以释放它。 如果垃圾收集器会释放我的单例类,如何避免它的释放?

等待同时阻塞的GC

当我在模拟器上运行我的应用程序时,Logcat显示如下: 04-22 16:21:30.685: D/dalvikvm(967): GC_CONCURRENT freed 1545K, 20% free 7019K/8720K, paused 78ms+17ms, total 360ms 04-22 16:21:30.685: D/dalvikvm(967): WAIT_FOR_CONCURRENT_GC blocked 143ms 04-22 16:21:31.845: D/dalvikvm(967): GC_CONCURRENT freed 1552K, 20% free 7019K/8720K, paused 116ms+18ms, total 554ms 04-22 16:21:31.845: D/dalvikvm(967): WAIT_FOR_CONCURRENT_GC blocked 268ms 04-22 16:21:32.435: D/dalvikvm(967): GC_CONCURRENT freed 1545K, 20% free 7019K/8720K, paused 75ms+9ms, total 192ms 04-22 16:21:32.435: D/dalvikvm(967): […]

清除内存exception的堆内存

我知道关于内存不足的问题已经被问到,但是我没有find解决办法 在位图工厂我得到了内存exception,甚至使用 inSampleSize=1 所以我用它包围它通过尝​​试捕捉内存exception,因为这是一个不好的做法 try{ ……… …… }catch (OutOfMemoryError e) {} 内存不足的exception也抓到了,但是我的问题是抓到这个exception之后我们才能 清除或重新分配GC的堆内存 有没有解决办法? 我用 的System.gc(); 没有用的请帮忙!!!!!!! not even Bitmap also for GridView Orientation i found this exception Clamp target GC heap from 17.333MB to 16.000MB Out of memory on a 140416-byte allocation.

GC_CONCURRENT日志消息中的“已暂停”值是什么?

我试图探索GingerBread(2.3)中新的并发垃圾收集器的行为。 有人可以详细解释这些示例日志行(尤其是GC_CONCURRENT和GC_FOR_MALLOC的“已暂停”部分)吗? 12-24 10:20:54.912 D/dalvikvm( 414): GC_CONCURRENT freed 510K, 57% free 2529K/5831K, external 716K/1038K, paused 8ms+5ms 12-24 10:20:54.963 D/dalvikvm( 414): GC_FOR_MALLOC freed 510K, 57% free 2529K/5831K, external 716K/1038K, paused 47ms

Android适当的清理/处置

有没有办法来“清理”你创build的对象和其他variables? 或者他们是自动处理还是我有这个概念是错误的? 这样做的正确方法是什么? 我尽量避免GC。

WeakReference与ArrayList?

我知道用WeakReference ,如果我做了一个WeakReference的东西,除非有直接的引用,它将被垃圾收集下一个GC周期。 我的问题是,如果我做一个WeakReference的ArrayList ? 例如: ArrayList<WeakReference<String>> exArrayList; exArrayList = new ArrayList<WeakReference<String>>(); exArrayList.add(new WeakReference<String>("Hello")); 我现在可以用exArrayList.get(0).get()来访问数据。 我的问题变成:这是WeakReference数据,位于exArrayList.get(0)的数据将GC'd与下一个GC周期? (即使我不直接引用它),还是这个特定的参考会继续下去,直到arraylist被清空? (例如: exArrayList.clear(); )。 如果这是重复的,我还没有发现它与我的关键字在谷歌。

如何在三星手机上停止过多的对象创build?

我有很多Android手机上的animation放缓问题。 我跟踪了这​​个问题,垃圾收集太多了。 但是,没有任何对象是由我的代码直接创build的。 这是来自DDMS中的分配跟踪器的堆栈跟踪。 at com.samsung.android.multiwindow.MultiWindowStyle$1.createFromParcel(MultiWindowStyle.java:493) at com.samsung.android.multiwindow.MultiWindowStyle$1.createFromParcel(MultiWindowStyle.java:491) at com.samsung.android.multiwindow.IMultiWindowFacade$Stub$Proxy.getMultiWindowStyle(IMultiWindowFacade.java:499) at com.samsung.android.multiwindow.MultiWindowFacade.getMultiWindowStyle(MultiWindowFacade.java:81) at android.app.Activity.getMultiWindowStyle(Activity.java:4681) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1688) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1264) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6614) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813) at android.view.Choreographer.doCallbacks(Choreographer.java:613) at android.view.Choreographer.doFrame(Choreographer.java:583) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:146) at android.app.ActivityThread.main(ActivityThread.java:5678) 当用户触摸屏幕时,这将创build数以千计的Rect和Point对象。 有谁知道解决方法? 我不瞄准三星手机或使用他们的sdks或图书馆。