Tag: 垃圾收集

Android垃圾收集器的技术细节

在研究各种移动平台的共性/差异时,调查的一个方面就是内存pipe理。 因此,我对有关各种机制的更详细的技术信息感兴趣。 具体来说,例如Android使用哪种垃圾收集器types ? ( [Google Groups Discussion]]build议它使用“追踪”机制 – 但是我会欣赏一个我可以引用的“更官方”的源代码,并且希望能find那些types可能对程序员有用的信息。 在我的问题之中,Android 3.0(Honeycomb)中的GC是如何针对多个处理器进行调整的 ? [Android开发者指南]build议 Android 3.0是该平台的第一个版本,可以在单核或多核处理器架构上运行。 Dalvik虚拟机,仿生库和其他地方的各种变化增加了对多核环境中对称多处理的支持。 这些优化可以使所有的应用程序都受益,甚至是那些单线程的应用程序。 例如,对于两个活动内核,如果Dalvik垃圾收集器在第二个内核上运行,单线程应用程序仍然可以提高性能。 系统会自动安排。“ 和以前一样,我宁愿find一个有更多技术信息的来源阅读。 再一次, 对开发人员有什么影响 (除了显而易见的是希望提高性能)? 任何这样的input表示赞赏。 谢谢!

JavaScript在运行时如何表示闭包和范围

这大部分是出于好奇的问题。 考虑以下function var closure ; function f0() { var x = new BigObject() ; var y = 0 ; closure = function(){ return 7; } ; } function f1() { var x = BigObject() ; closure = (function(y) { return function(){return y++;} ; })(0) ; } function f2() { var x = BigObject() ; var […]

所以GC.Collect()

好吧,我已经阅读了几个关于它的话题,但是在这里。 让我们想象一下,我有一个应用程序,基本上每隔一会儿我都会点击一个button,很多事情会发生几分钟,然后它会保持闲置一小时,或者只是一分钟。 那么在这之后不会有一个好的情况叫GC.Collect? 我的意思是,我知道那个时候我不会使用我的应用程序,GC也不会猜测它。

垃圾收集器和循环引用

考虑这两个类: public class A { B b; public A(B b) { this.b = b; } } public class B { A a; public B() { this.a = new A(this); } } 如果我有像上面这样devise的课程,垃圾收集员(GC)会收集这些课程的对象吗? 假设我这样做: void f() { B b = new B(); } 在这个方法中,我创build了一个名为b的B实例,当方法返回时, b超出范围,GC应该能够收集它,但是如果要收集它,则必须先收集第一个哪一个是B的成员,而要收集a ,则需要先收集b这个A的成员。 它变成圆形。 所以我的问题是:这样的循环引用是为了防止GC收集对象? 如果是,那么我们如何避免这个问题呢? 我们如何确保在课堂devise中没有循环引用? 是否有任何工具(或编译器选项)可以帮助我们检测循环引用? 如果不是,我们在哪里以及为什么使用WeakReference类? 它的目的是什么?

Bitmap,Bitmap.recycle(),WeakReferences和垃圾收集

Android上的AFAIK,build议引用Bitmap对象作为WeakReferences,以避免内存泄漏。 当没有更多的硬引用保留位图对象时,垃圾收集器将自动收集它。 现在,如果我理解正确,必须始终调用方法Bitmap.recycle()来释放一个位图。 我认为这是因为Bitmap对象有特殊的内存pipe理。 那是对的吗? 如果这是真的,那么在使用WeakReferences时,必须存在内存泄漏,因为在释放WeakReferences时,Bitmap.recycle()永远不会被调用。 或者,不知何故,WeakReferences足以避免内存泄漏? 谢谢

SqlCommand.Dispose是否closures连接?

我可以有效地使用这种方法吗? using(SqlCommand cmd = new SqlCommand("GetSomething", new SqlConnection(Config.ConnectionString)) { cmd.Connection.Open(); // set up parameters and CommandType to StoredProcedure etc. etc. cmd.ExecuteNonQuery(); } 我关心的是:SqlCommand的Dispose方法(在退出using块时调用)是否会closures底层的SqlConnection对象?

如何处理:java.util.concurrent.TimeoutException:android.os.BinderProxy.finalize()10秒后超时错误?

我们在GcWatcher.finalize, BinderProxy.finalize和PlainSocketImpl.finalize看到了一些TimeoutExceptions 。 其中90%以上发生在Android 4.3上。 我们从这个领域的用户那里得到了Crittercism的报告。 错误是一个变种:“ com.android.internal.BinderInternal$GcWatcher.finalize() timed out after 10 seconds ” java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize() timed out after 10 seconds at android.os.BinderProxy.destroy(Native Method) at android.os.BinderProxy.finalize(Binder.java:459) at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:187) at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170) at java.lang.Thread.run(Thread.java:841) 到目前为止,我们还没有在内部重现问题或找出可能造成的问题。 任何想法可以导致这一点? 任何想法如何debugging,并找出哪个部分的应用程序导致这一点? 任何事情都可以帮助解决问题。 更多Stacktraces: 1 android.os.BinderProxy.destroy 2 android.os.BinderProxy.finalize Binder.java, line 482 3 java.lang.Daemons$FinalizerDaemon.doFinalize Daemons.java, line 187 4 java.lang.Daemons$FinalizerDaemon.run Daemons.java, line 170 5 […]

当没有剩余内存时,.Net和Bitmap不会由GC自动处理

我想知道如何分配和处理分配给位图的内存在.NET中工作。 当我在一个函数的循环中做了大量的位图创build并连续调用它时,它会一直运行,直到某些时候Bitmap将不能分配给出指定大小的“无效参数”exception的内存。 如果我打电话给垃圾收集器,而它的工作。 用下面的代码你可以重新编译错误: class BitmapObject { public bool Visible { get { return enb; } set { enb = value; } } private bool enb; private Bitmap bmp; public BitmapObject(int i, bool en) { enb = en; bmp = new Bitmap(i, i); } } class Pool<T> where T : BitmapObject { List<T> preallocatedBitmaps = […]

什么是静态variables的实际内存空间?

静态variables是在程序执行的整个过程中分配的,所以堆栈和堆都不方便。 那它在哪? 应该有一个地方加载?

什么时候将一个string垃圾收集在Java中

在Java中,当对象没有实时引用时,就有资格进行垃圾回收。 现在在string的情况下,情况并非如此,因为string将进入string池,并且JVM将保持该对象活着以用于重用。 这意味着一旦创build的string将永远不会被垃圾收集?