garbage-collection相关内容

Java GC 是如何调用 finalize() 方法的?

据我了解,GC 从一组初始对象(堆栈、静态对象)开始,然后递归遍历它,构建可达对象图.然后它将这些对象占用的内存标记为已占用,并假定所有其余内存都是空闲的. 但是如果这个“空闲"内存包含一个带有 finalize 方法的对象呢?GC 必须调用它,但我不明白它是如何知道不再可访问的对象的. 我想 GC 可以在所有“可终结"对象还活着的时候跟踪它们.如果是这样,具有可终结对象是否会使垃圾收 ..
发布时间:2022-01-16 10:30:01 Java开发

限制 C# 应用程序中托管堆的大小

我能否配置我的 C# 应用程序以将其内存消耗限制为 200MB?IOW,我不想等待自动 GC(这似乎使堆增长得比这个应用程序实际需要的多得多). 我知道在 Java 中有一个命令行开关可以传递给实现此目的的 JVM.在 C# 中是否有等价物? 附言 我知道我可以从代码中调用 GC,但我不想定期这样做.我宁愿在启动时设置一次然后忘记它. 解决方案 我不知道常规 CLR 有任 ..
发布时间:2022-01-16 10:29:55 C#/.NET

大对象堆碎片:CLR有什么解决办法吗?

如果您的应用程序必须对大尺寸对象(>85000 字节)进行大量分配/取消分配,最终会导致内存碎片,您的应用程序将抛出内存不足异常. 这个问题有什么解决办法还是CLR内存管理的限制? 解决方案 不幸的是,我所看到的所有信息都只建议自己管理风险因素:重用大对象,在开始时分配它们,确保它们是如果大小是彼此的倍数,则使用替代数据结构(列表、树)而不是数组.这只是给了我另一个想法,即创建一个非 ..
发布时间:2022-01-16 10:29:38 C#/.NET

为什么 git 不会进一步减小存储库的大小?

我有一个只有一个提交的存储库,其签出大小为 95M.但是,我无法获得低于 213M 的 .git 文件夹大小.但是,如果我创建一个具有相同文件内容的新存储库,我会得到一个只有 38M 的 .git 文件夹. 有没有办法让 git 重建它的对象,以便通过创建一个新的存储库使大小更符合图形? 我尝试了 git gc --prune=now --aggressive 和 git repack ..
发布时间:2022-01-16 10:29:30 其他开发

如何将对象交给python垃圾收集?

在 SO 中有几个关于 Python 垃圾收集的线程,在阅读了大约五个之后,加上一些在线文档,我仍然不确定垃圾收集是如何工作的,以及我应该如何管理我不使用的对象.事实上,在我读到的某处,有人不应该对收集垃圾做任何事情,其他人告诉人们应该 del 对象,而其他人再次解释说,取消引用一个对象足以让 Python 将其作为垃圾收集. 所以,冒着创建重复的风险,我会再次问这个问题,但不同的是,希望得 ..
发布时间:2022-01-16 10:29:07 Python

随着分配更多的盒装数组,代码变得更慢

编辑: 事实证明,事情通常(不仅仅是数组/引用操作)会减慢创建更多数组的速度,所以我猜这可能只是测量增加的 GC 时间和可能没有我想的那么奇怪.但是我真的很想知道(并学习如何找出)这里发生了什么,以及是否有某种方法可以在创建大量小型数组的代码中减轻这种影响.原始问题如下. 在调查库中一些奇怪的基准测试结果时,我偶然发现了一些我不理解的行为,尽管它可能非常明显.许多操作(创建新的Mutable ..
发布时间:2022-01-16 10:28:59 其他开发

未收集 AsyncTask 导致其他 AsyncTask 无法运行

我的应用程序使用了很多 AsyncTask.毕竟它是一个网络应用程序.当我跟踪 Debug 选项卡时,我注意到每个 AsyncTask 都说在它后面运行,并且在 5 个 AsyncTasks 之后,我无法启动任何 AsyncTasks.我通过将执行程序更改为 THREAD_POOL_EXECUTOR 来修复它,它允许池化 15 个线程.但是 AsyncTasks 仍然显示为正在运行. Asy ..

如何计算 ruby​​ 中一个类的现有实例?

这是这个问题的一个想法:在创建对象时,增加一个类变量.当对象被收集时,减少它.如您所见,finalizer 被调用,并且 @@no_foo 被递减.但是当我稍后查询它时,减量消失了.似乎价值只会上升,永远不会下降(如果我创建两个对象,它将显示 2).我错过了什么明显的东西吗? 类 Foo@@no_foo = 0定义初始化放置“创建对象"@@no_foo += 1ObjectSpace.defin ..
发布时间:2022-01-16 10:28:38 其他开发

UIView 事件和垃圾回收

我观察到一些会影响任何程序的内存消耗的东西,我想提出一些想法. 我用 UIViewController 和 UINavigationViewController 创建了一个非常简单的测试项目.我推我的 ViewController,然后我弹出它.GC 完成了它的工作,我的 ViewController 被释放(调用了析构函数).但是,如果我创建一个 UIButton 并注册到它的一个事件(例 ..
发布时间:2022-01-16 10:28:29 其他开发

为什么总是需要在具有 IDisposable 成员的对象上实现 IDisposable?

据我所知,如果你有一个类 A 有一个成员 m 是 IDisposable,A 应该实现 IDisposable 并且它应该在其中调用 m.Dispose() 是一个公认的规则. 我找不到令人满意的理由. 我理解如果你有非托管资源,你应该提供一个终结器以及 IDisposable 的规则,这样如果用户没有显式调用 Dispose,终结器仍然会在 GC 期间清理. 但是,有了该规则, ..
发布时间:2022-01-16 10:28:20 C#/.NET

SafeHandle 和 HandleRef

在阅读了这两个方面的内容后,包括本网站上的高票回答,我仍然觉得这有点不清楚. 由于我对这件事的理解可能有误,我会先发布我所知道的概要,以便如果我错了可以纠正,然后再发布我的具体问题: 有时在编写托管代码时,我们必须将地址传递给非托管代码.这就是 IntPtr 的用途.但是,我们尝试确保两件相反的事情: a) 让 GC 中的指针(指向地址)保持活动状态.b) 在不需要时释放它(即使我们忘 ..
发布时间:2022-01-16 10:27:55 C#/.NET

为什么堆分为伊甸园、幸存者空间和老年代?

你能回答我一个关于 JVM 垃圾收集过程的问题吗? 为什么堆分为伊甸园、幸存者空间和老年代? 在处理年轻疏散时,通过从根开始的引用访问对象以找出无法访问的对象.可达对象被标记为“活动",不可达对象不被标记,将被淘汰. 因此,考虑 ALL 个对象,包括在老年代分配的对象,如果它们可达,也会被访问和标记. 据我了解,一次回收年轻代和老代要求很高,因为这些代位于内存的不同连续部分 ..
发布时间:2022-01-16 10:27:49 Java开发

方法调用期间创建的本地 Java 对象的生命周期

在方法调用中,如果我在该调用期间创建了一个对象.这些对象何时被垃圾收集? 它们是否放置在堆上,然后与堆上的其他对象一起收集垃圾.还是因为不需要它们而较早地收集了垃圾.该方法的执行已完成. 解决方案 当方法关闭时,在方法范围内创建的对象有资格进行垃圾回收 - 除非该引用作为返回值传回.在这种情况下,调用者可能会或可能不会挂在该引用上并阻止它被 gc'd. 由于垃圾收集器根据自己的 ..
发布时间:2022-01-16 10:27:43 Java开发

参考循环的实际例子是什么?

垃圾收集器具有处理引用循环的功能.据我了解,这对于所有带有 GC 的语言都是必要的. 但我不明白,为什么不能创建语言避免引用循环,必要时使用一些弱引用. 编程中不可避免的引用循环的真实例子是什么? 解决方案 你不能创建一种避免引用循环的编程语言,因为这是应用程序程序员的责任,而不是创建循环.您只能创建一种要求程序员始终承担该责任的语言. 这是允许或不允许循环的数据结构的基 ..
发布时间:2022-01-16 10:27:37 其他开发

在 h2o 中加载大于内存大小的数据

我正在尝试在 h2o 中加载大于内存大小的数据. H2o blog 提到:关于大数据的注释和 GC:当 Java 堆太满时,我们会执行用户模式交换到磁盘,即,您使用的大数据比物理 DRAM 多.我们不会因为 GC 死亡螺旋而死,但我们会降级到核外速度.我们会在磁盘允许的范围内以最快的速度前进.我亲自测试了将 12Gb 数据集加载到 2Gb(32 位)JVM 中;加载数据大约需要 5 分钟,运 ..
发布时间:2022-01-16 10:27:30 Java开发

c++11:它的gc接口是什么,如何实现?

我正在观看 Bjarne Stroustrup 的演讲“C++ 的本质".p> 在 44:26 中他提到了“C++11 指定了一个 GC 接口". 请问什么是接口,如何实现?网上有没有更详细的好介绍,或者一些示例代码来演示一下? 解决方案 Stroustrup 在他的 中扩展了这个讨论C++ FAQ,问题是 GC 的使用是可选的,库供应商可以自由实现或不实现: 垃圾收集(自动 ..
发布时间:2022-01-16 10:27:23 其他开发

是否可以停止 .NET 垃圾收集?

程序员是否可以在 C# 编程语言中以编程方式启动/停止垃圾收集?比如性能优化等等. 解决方案 不是.你可以给 GC通过 GC.AddMemoryPressure 等方法提示 或 GC.RemoveMemoryPressure 但不要完全停止. 此外,垃圾收集并不是一个密集的过程.程序员很少会担心它. ..
发布时间:2022-01-16 10:27:15 C#/.NET