Questions tagged «garbage-collection»

垃圾回收(GC)是一种自动内存管理形式,它尝试回收垃圾或程序不再使用的对象所占用的内存。

4
事件处理程序是否阻止垃圾回收的发生?
如果我有以下代码: MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass = null; pClass会被垃圾回收吗?还是会在事件发生时仍在触发事件呢?我是否需要执行以下操作才能进行垃圾回收? MyClass pClass = new MyClass(); pClass.MyEvent += MyFunction; pClass.MyEvent -= MyFunction; pClass = null;

2
了解.NET中的垃圾回收
考虑下面的代码: public class Class1 { public static int c; ~Class1() { c++; } } public class Class2 { public static void Main() { { var c1=new Class1(); //c1=null; // If this line is not commented out, at the Console.WriteLine call, it prints 1. } GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine(Class1.c); // prints 0 …

6
JavaScript闭包如何被垃圾回收
我已记录以下Chrome错误,这导致我的代码中发生了许多严重且不明显的内存泄漏: (这些结果使用Chrome Dev Tools的内存配置文件,该内存配置文件运行GC,然后对未垃圾收集的所有内容进行堆快照。) 在下面的代码中,someClass实例被垃圾回收(良好): var someClass = function() {}; function f() { var some = new someClass(); return function() {}; } window.f_ = f(); 但是在这种情况下,它不会被垃圾回收(不好): var someClass = function() {}; function f() { var some = new someClass(); function unreachable() { some; } return function() {}; } window.f_ = …

11
如何处理:java.util.concurrent.TimeoutException:android.os.BinderProxy.finalize()在10秒错误后超时?
我们看到了许多TimeoutExceptionsin GcWatcher.finalize, BinderProxy.finalize和PlainSocketImpl.finalize。其中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) 到目前为止,我们还没有运气在内部重现问题或弄清楚是什么原因引起的。 有什么想法会导致这种情况吗?任何想法如何调试它并找出导致该问题的应用程序的哪一部分?可以发现该问题的任何信息都会有所帮助。 更多堆栈跟踪: 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 …

24
什么时候可以调用GC.Collect?
一般建议是,您不应GC.Collect从代码中调用,但是此规则的例外是什么? 我只能想到一些非常特殊的情况,在这些情况下强制进行垃圾回收是有意义的。 想到的一个示例是一项服务,该服务每隔一段时间醒来,执行一些任务,然后长时间睡眠。在这种情况下,最好强制执行一次收集以防止即将闲置的进程保留所需的更多内存。 还有其他情况下可以接受通话GC.Collect吗?

8
Java垃圾回收如何与循环引用一起使用?
根据我的理解,如果没有其他“指向”该对象的内容,则Java中的垃圾回收会清除某些对象。 我的问题是,如果我们遇到这样的情况,会发生什么: class Node { public object value; public Node next; public Node(object o, Node n) { value = 0; next = n;} } //...some code { Node a = new Node("a", null), b = new Node("b", a), c = new Node("c", b); a.next = c; } //end of scope …

9
C ++中的堆栈,静态和堆
我已经搜索过,但是我对这三个概念不太了解。什么时候必须使用动态分配(在堆中),它的真正优势是什么?静态和堆栈有什么问题?我可以编写整个应用程序而不在堆中分配变量吗? 我听说其他语言结合了“垃圾收集器”,因此您不必担心内存。垃圾收集器做什么? 如果使用此垃圾收集器无法完成操作,那么您可以自己处理内存吗? 有人对我说了这个声明: int * asafe=new int; 我有一个“指向指针的指针”。这是什么意思?它的不同之处在于: asafe=new int; ?

6
明确关闭文件重要吗?
在Python中,如果您不调用即可打开文件close(),或者不使用try- finally或“ with”语句而关闭文件,这是问题吗?还是依靠Python垃圾回收来关闭所有文件作为一种编码实践就足够了?例如,如果这样做: for line in open("filename"): # ... do stuff ... ...这是一个问题,因为文件永远无法关闭,并且可能发生阻止文件关闭的异常吗?还是for由于文件超出范围而肯定会在声明结束时将其关闭?


8
正确实现IDisposable
在我的课程中,我实现IDisposable的方式如下: public class User : IDisposable { public int id { get; protected set; } public string name { get; protected set; } public string pass { get; protected set; } public User(int UserID) { id = UserID; } public User(string Username, string Password) { name = Username; pass = …

7
如何防止IDisposable传播到您的所有班级?
从这些简单的类开始... 假设我有一组简单的类,如下所示: class Bus { Driver busDriver = new Driver(); } class Driver { Shoe[] shoes = { new Shoe(), new Shoe() }; } class Shoe { Shoelace lace = new Shoelace(); } class Shoelace { bool tied = false; } A Bus有一个Driver,A 有Driver两个Shoe,每个Shoe都有一个Shoelace。一切都很傻。 将IDisposable对象添加到Shoelace 后来我决定对进行某些操作Shoelace可以是多线程的,因此我EventWaitHandle为线程添加了一个与之通信。所以Shoelace现在看起来像这样: class Shoelace { private …

1
Python垃圾收集器文档
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 5年前关闭。 改善这个问题 我正在寻找详细描述python垃圾回收如何工作的文档。 我对在哪个步骤中完成操作很感兴趣。这三个集合中有哪些对象?在每个步骤中删除哪些对象?参考循环使用什么算法? 背景:我正在实施一些必须在短时间内完成的搜索。当垃圾收集器开始收集最旧的一代时,它比其他情况“慢很多”。它花费了比计划搜索更多的时间。我正在寻找如何预测何时收集最古老的一代以及需要多长时间。 很容易预测何时使用get_count()和收集最老的一代get_threshold()。也可以使用进行操纵set_threshold()。但是我看不出collect()用武力做出更好的决定或等待预定的收集会多么容易。

5
减少Haskell程序中的垃圾收集暂停时间
我们正在开发一个程序,该程序可以接收和转发“消息”,同时保留这些消息的临时历史记录,以便在需要时可以告诉您消息的历史记录。消息是通过数字标识的,通常大小约为1 KB,我们需要保留成百上千的此类消息。 我们希望针对延迟优化此程序:发送和接收消息之间的时间必须小于10毫秒。 该程序用Haskell编写,并由GHC编译。但是,我们发现,垃圾回收暂停对于我们的延迟要求来说太长了:在我们的实际程序中超过100毫秒。 以下程序是我们应用程序的简化版本。它使用a Data.Map.Strict来存储消息。消息ByteString由标识Int。1,000,000条消息以递增的数字顺序插入,并且最旧的消息不断被删除,以使历史记录最多保留200,000条消息。 module Main (main) where import qualified Control.Exception as Exception import qualified Control.Monad as Monad import qualified Data.ByteString as ByteString import qualified Data.Map.Strict as Map data Msg = Msg !Int !ByteString.ByteString type Chan = Map.Map Int ByteString.ByteString message :: Int -> Msg message n = …

3
Java GC(分配失败)
为什么总是“ GC(分配失败)”? 适用于linux-amd64 JRE(1.8.0_25 -b17)的Java HotSpot(TM)64位服务器VM(25.25- b02), CommandLine flags: -XX:CMSInitiatingOccupancyFraction=60 -XX:GCLogFileSize=10485760 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=32212254720 -XX:MaxHeapSize=32212254720 -XX:NewRatio=10 -XX:OldPLABSize=16 -XX:ParallelGCThreads=4 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintStringTableStatistics -XX:+PrintTenuringDistribution -XX:StringTableSize=1000003 -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=50 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC 27.329: [GC (Allocation Failure) 27.329: [ParNew Desired survivor size 44728320 bytes, new threshold 15 (max 15) - age 1: 16885304 bytes, …

4
运行“ git gui”时如何跳过“松散对象”弹出窗口
当我运行'git gui'时,我会弹出一个对话框 该存储库当前有大约1500个松散对象。 然后建议压缩数据库。我之前已经做过,它可以将松散的对象减少到250个左右,但这并不能抑制弹出窗口。再次压缩不会更改松散对象的数量。 从Perforce过渡时,当前的工作流程需要大量使用“变基”,而Perforce仍然是规范的SCM。一旦Git是规范的SCM,我们将进行常规合并,并且应该大大减轻松散对象的问题。 同时,我真的很想让这个“有用的”弹出窗口消失。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.