Questions tagged «garbage-collection»

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

14
Java非常大的堆大小
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 改善这个问题 是否有人在Java中使用12 GB或更高的超大堆有经验? GC是否会使程序无法使用? 您使用什么GC参数? 哪种JVM,Sun或BEA更适合于此? 在这种情况下,哪种平台(Linux或Windows)性能更好? 在Windows的情况下,如此高的内存负载下64位Vista和XP之间会有性能差异吗?


4
为什么System.Timers.Timer在GC中幸存,但在System.Threading.Timer中却不行?
看来System.Timers.Timer实例是通过某种机制保持活动的,但System.Threading.Timer实例却没有。 带有定期System.Threading.Timer和自动重置的示例程序System.Timers.Timer: class Program { static void Main(string[] args) { var timer1 = new System.Threading.Timer( _ => Console.WriteLine("Stayin alive (1)..."), null, 0, 400); var timer2 = new System.Timers.Timer { Interval = 400, AutoReset = true }; timer2.Elapsed += (_, __) => Console.WriteLine("Stayin alive (2)..."); timer2.Enabled = true; System.Threading.Thread.Sleep(2000); Console.WriteLine("Invoking GC.Collect..."); …

12
RAII与垃圾收集器
我最近在CppCon 2016上观看了Herb Sutter关于“ Leak Free C ++ ...”的精彩演讲,他在演讲中谈到了使用智能指针实现RAII(资源获取是初始化)-概念以及它们如何解决大多数内存泄漏问题。 现在我在想。如果我严格遵守RAII规则,这似乎是一件好事,那为什么与C ++中的垃圾收集器有什么不同呢?我知道,使用RAII,程序员可以完全控制何时再次释放资源,但是在任何情况下,仅使用垃圾收集器都是有好处的吗?效率会降低吗?我什至听说有一个垃圾收集器可以提高效率,因为它可以一次释放更大的内存块,而不是在整个代码中释放小的内存块。


7
如何强制JavaScript深度复制字符串?
我有一些如下的javascript代码: var myClass = { ids: {} myFunc: function(huge_string) { var id = huge_string.substr(0,2); ids[id] = true; } } 稍后,该函数将使用一些大字符串(100 MB +)进行调用。我只想保存在每个字符串中找到的简短ID。但是,谷歌浏览器的子字符串函数(实际上是我的代码中的正则表达式)仅返回引用原始字符串的“切片字符串”对象。因此,在对进行一系列调用之后myFunc,我的chrome标签页内存不足,因为临时huge_string对象无法进行垃圾回收。 如何复制字符串,id以便huge_string不维护对的引用,并且huge_string可以对垃圾进行垃圾回收?

10
去GC还是不去GC
我最近看了两个非常有趣且具有教育意义的语言讲座: Herb Sutter撰写的第一篇文章介绍了C ++ 0x的所有出色功能,凉爽的功能,为什么C ++的未来似乎比以往更加光明,以及M $在这场比赛中如何被称为好人。讨论围绕效率以及如何经常减少堆活动来提高性能。 另一位由Andrei Alexandrescu创作,激发了从C / C ++到他的新游戏改变者D的过渡。D的大多数工作似乎都动机和设计都很好。但是,令我感到惊讶的是,D推动了垃圾回收,并且所有类都是仅通过引用创建的。更令人困惑的是,《 D编程语言参考手册》一书在有关资源管理的章节中特别 指出以下内容: 垃圾回收消除了C和C ++中必需的繁琐且易于出错的内存分配跟踪代码。这不仅意味着更快的开发时间和更低的维护成本,而且生成的程序经常运行得更快! 这与Sutter关于减少堆活动的不断讨论相矛盾。我非常尊重Sutter和Alexandrescou的见解,因此我对这两个关键问题感到困惑 并非仅通过引用创建类实例会导致大量不必要的堆活动吗? 在哪些情况下可以使用垃圾回收而不牺牲运行时性能?

2
防止在短时间内收集.NET垃圾
我有一个高性能的应用程序,正在处理大量数据。它正在非常短的时间内接收,分析和丢弃大量信息。这会导致大量对象流失,而我目前正在尝试优化该对象流失,但同时也会导致第二个问题。当垃圾回收启动时,它可能会导致某些长时间的清理工作(很长一段时间,我的意思是10到100毫秒)。99%的时间是可以接受的,但是对于大约1-2分钟长的短暂时间,我需要绝对确保垃圾回收不会造成延迟。我知道这些时间段何时会提前发生,我只需要一种方法来确保在此期间不会发生垃圾收集。该应用程序是使用.NET 4以C#编写的。 我的问题是; 是否可以暂时暂停整个程序的垃圾回收? 是否可以使用System.GC.Collect()强制在我需要免费垃圾收集的窗口之前进行垃圾收集,如果我将多长时间免费使用垃圾收集? 人们对减少总体垃圾收集有何建议? 注意-该系统相当复杂,具有许多不同的组件。我希望避免使用必须在程序的每个类上实现自定义IDisposable接口的方法。

9
C ++中的垃圾收集库
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 7年前关闭。 改善这个问题 哪些免费的和商业的垃圾收集库可用于C ++,每种都有哪些优缺点? 我对在该领域的实际使用中来之不易的教训感兴趣,而不是市场营销或促销宣传中的教训。 无需详细说明与自动垃圾收集相关的通常的取舍,但是请务必提及所使用的算法(引用计数,标记和清除,增量等),并简要总结其后果。




12
由于.NET具有垃圾回收器,为什么我们需要终结器/析构函数/处置模式?
如果我理解正确,.net运行时将始终在我之后清理。因此,如果我创建新对象并且停止在代码中引用它们,则运行时将清理这些对象并释放它们占用的内存。 既然是这种情况,那么为什么某些对象需要具有析构函数或dispose方法?当不再引用它们时,运行时是否会清理它们?

15
“处置”是否仅应用于包含非托管资源的类型?
我最近正在与一位同事讨论Dispose实现的价值和类型IDisposable。 我认为IDisposable,即使没有任何非托管资源需要清理,实现应尽快清理的类型也很有价值。 我的同事有不同的看法。执行IDisposable,如果你没有任何非托管资源为你的类型,最终会被垃圾收集是没有必要的。 我的观点是,如果您希望尽快关闭ADO.NET连接,则可以实施IDisposable并且using new MyThingWithAConnection()有意义。我的同事回答说,在幕后,ADO.NET连接是不受管理的资源。我对他的答复是,所有事情最终都是不受管理的资源。 我知道的建议一次性模式,你免费托管和非托管资源,如果Dispose被调用,但如果通过终结/析构函数称为唯一的免费托管资源(和博客前一阵子关于如何提醒消费者不当使用您的IDisposable类型的) 因此,我的问题是,如果您的类型不包含非托管资源,是否值得实现IDisposable?

1
KB4525236更改了GetRef的内存消耗(垃圾回收)
在Windows 2016 Server / Windows 10客户端上安装KB4525236后,我们会遇到内存不足的问题。通过调用函数时,内存被垃圾回收时,此安全修复程序似乎已发生更改GetRef。 PréKB4525236 GetRef在实例变量设置为时,在通过调用的函数中创建的每个实例都会被垃圾回收。nothing 帖子KB4525236 在通过调用的函数中创建的每个实例都GetRef保留在内存中,并且仅在整个函数完成时才进行垃圾回收。在循环中创建实例时,这可能会迅速累加并导致内存不足,尤其是在32位进程中。 问题 我们在网上找不到任何相关内容,因此我们希望获得其他遇到相同问题的人的确认。 编辑从零开始:这是相同的问题,但尚未解决 (自KB4524570(2019年11月12日)Windows 10 1903起vbscript.dll class_terminate bug 如果有人可以验证并知道可行的解决方案,那就太好了。 POC 在安装了KB4525236的设备上运行的以下脚本显示了以下情况下垃圾收集的区别: 直接调用:仅在第一个实例销毁后才创建第二个实例(这是我们期望的行为) 通过调用GetRef:第二个实例在第一个实例被销毁之前创建,因此有两个实例使用内存。 另存为:KB4525236.vbs 运行为:wscript KB4525236.vbs Dim Name, Log Class IDummyInstance Dim FName Sub Class_Initialize FName = Name Log = Log & "Initialize " & FName & VbNewLine End Sub …

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.