garbage-collection相关内容

新的自动引用计数机制是如何工作的?

有人可以向我简要解释一下 ARC 的工作原理吗?我知道它与垃圾收集不同,但我只是想知道它究竟是如何工作的. 另外,如果 ARC 在不影响性能的情况下做 GC 所做的事情,那么 Java 为什么要使用 GC?为什么它不也使用 ARC? 解决方案 每个使用 Objective-C 的新开发人员都必须学习何时保留、释放和自动释放对象的严格规则.这些规则甚至指定了暗示从方法返回的对象的保留计 ..
发布时间:2021-12-02 17:42:51 C/C++开发

使用 GC.Collect() 有什么问题?

虽然我确实理解使用这个函数的严重影响(或者至少我是这么认为的),但我不明白为什么它会成为受人尊敬的程序员永远不会使用的东西之一,即使是那些不使用的人甚至不知道它是做什么用的. 假设我正在开发一个应用程序,其中内存使用量因用户的操作而异.应用程序生命周期可以分为两个主要阶段:编辑和实时处理.在编辑阶段,假设创建了数十亿甚至数万亿个对象;其中有些很小,有些没有,有些可能有终结器,有些可能没有,假 ..
发布时间:2021-12-02 14:04:07 C#/.NET

为什么是大对象堆,我们为什么要关心?

我已阅读有关代和大对象堆的信息.但我还是不明白拥有大对象堆的意义(或好处)是什么? 如果 CLR 仅依靠第 2 代(考虑到 Gen0 和 Gen1 的阈值很小,无法处理大对象)来存储大对象,会出现什么问题(在性能或内存方面)? 解决方案 垃圾回收不仅清除未引用的对象,还压缩堆.这是一个非常重要的优化.它不仅使内存使用更高效(没有未使用的漏洞),它还使 CPU 缓存更高效.缓存在现代处 ..
发布时间:2021-12-02 14:03:19 C#/.NET

Machine.Config 在哪里?

我想应用更改以便我可以为我的 C# 3.5 应用程序使用服务器 GC 设置 - 我可以通过编辑 machine.config 文件来实现. 唯一的问题是我不知道那在哪里. 如何在多台不同的机器上以可重复的方式找到这个文件的路径 解决方案 32-bit %windir%\Microsoft.NET\Framework\[版本]\config\machine.config 64 ..
发布时间:2021-12-02 13:54:12 C#/.NET

在 C# 中强制垃圾回收的最佳实践

根据我的经验,似乎大多数人会告诉您强制进行垃圾回收是不明智的,但在某些情况下,您正在处理的大对象并不总是在 0 代中被回收,但内存是问题,可以强制收集吗?是否有这样做的最佳实践? 解决方案 最佳做法是不要强制进行垃圾回收. 根据 MSDN: "可以强制垃圾通过调用 Collect 来收集,但是大多数时候,这应该是避免,因为它可能会产生性能问题." 但是,如果您可以可靠地测 ..
发布时间:2021-12-02 13:44:33 C#/.NET

您是否需要处理对象并将它们设置为空?

您是否需要处理对象并将它们设置为 null,或者当它们超出范围时垃圾收集器会清除它们? 解决方案 当对象不再被使用并且垃圾收集器认为合适时,它们将被清理.有时,您可能需要将对象设置为 null 以使其超出范围(例如不再需要其值的静态字段),但总的来说通常不需要设置到 null. 关于处置对象,我同意@Andre.如果对象是IDisposable,那么当您不再需要它时处理它是个好主意, ..
发布时间:2021-12-02 13:41:29 C#/.NET

什么时候可以调用 GC.Collect?

一般的建议是你不应该从你的代码中调用 GC.Collect,但是这个规则有什么例外? 我只能想到几个非常具体的情况,在这些情况下,强制进行垃圾收集是有意义的. 我想到的一个例子是服务,它每隔一段时间醒来,执行一些任务,然后长时间休眠.在这种情况下,强制收集以防止即将空闲的进程占用比需要更多的内存可能是一个好主意. 是否还有其他情况可以调用GC.Collect? 解决方案 ..
发布时间:2021-12-02 13:36:49 C#/.NET

C++ 中的堆栈、静态和堆

我搜索过,但是我对这三个概念不是很了解.我什么时候必须使用动态分配(在堆中),它的真正优势是什么?static和stack的问题是什么?我可以编写整个应用程序而不在堆中分配变量吗? 我听说其他语言包含“垃圾收集器",因此您不必担心内存.垃圾收集器是做什么的? 你可以自己操作内存做什么,而使用这个垃圾收集器却无法做到? 有一次有人用这个声明对我说: int * asafe=new ..
发布时间:2021-12-01 15:32:25 C/C++开发

事件处理程序会阻止垃圾收集的发生吗?

如果我有以下代码: MyClass pClass = new MyClass();pClass.MyEvent += MyFunction;pClass = null; pClass 会被垃圾回收吗?或者它会不会在事件发生时仍然触发它的事件?我是否需要执行以下操作才能允许垃圾收集? MyClass pClass = new MyClass();pClass.MyEvent += MyFunc ..
发布时间:2021-12-01 09:58:27 C#/.NET

了解 .NET 中的垃圾收集

考虑以下代码: 公共类 Class1{公共静态 int c;~Class1(){C++;}}公开课 Class2{public static void Main(){{var c1=new Class1();//c1=空;//如果这一行没有被注释掉,在 Console.WriteLine 调用中,它打印 1.}GC.Collect();GC.WaitForPendingFinalizers(); ..
发布时间:2021-12-01 09:00:53 C#/.NET

正确使用 IDisposable 接口

通过阅读微软文档,我知道“主要"使用IDisposable 接口是清理非托管资源. 对我来说,“非托管"意味着诸如数据库连接、套接字、窗口句柄等.但是,我见过实现 Dispose() 方法以释放托管的代码 资源,这对我来说似乎是多余的,因为垃圾收集器应该为您处理这些. 例如: 公共类 MyCollection : IDisposable{私人列表_theList = new List ..
发布时间:2021-12-01 08:59:55 C#/.NET

Android Logcat中GC_FOR_MALLOC、GC_EXPLICIT等GC_*是什么意思?

如果您查看 Android 日志,您可能会看到很多这样的内容. 它们是什么意思,了解这些可能有助于我们更好地分配内存. 示例: 28470 dalvikvm D GC_FOR_MALLOC 在 71 毫秒内释放了 665 个对象/239992 字节28470 dalvikvm D GC_FOR_MALLOC 在 87 毫秒内释放了 673 个对象/240288 字节21940 da ..
发布时间:2021-11-27 19:13:44 移动开发

在程序分配的内存之外访问.(访问其他应用程序的内存)

有没有一种方法可以访问(读取或释放)位于为程序分配的内存之外的内存块,而不会出现访问冲突异常.好吧,除此之外,我实际上想了解的是内存清理器(系统垃圾收集器)是如何工作的.我一直想写一个这样的程序.(语言不是问题) 提前致谢:) 解决方案 简单的答案(我没看错),不.通常这不是一个好主意,原因有两个.首先是因为它会导致您的程序和其他程序之间出现信任问题(更不用说我们人类也不会信任您的应 ..
发布时间:2021-11-26 20:13:37 其他开发

缓存反射数据

缓存从反射获得的昂贵数据的最佳方法是什么?例如,大多数快速序列化程序缓存此类信息,因此它们不需要在每次再次遇到相同类型时进行反映.他们甚至可能生成一个动态方法,从类型中查找. .net 4 之前 传统上,我为此使用了普通的静态字典.例如: private static ConcurrentDictionary>缓存;公共静态 DoSomething(对象 o){动作行动;if ..
发布时间:2021-11-26 11:56:19 C#/.NET

Gen2 收集并不总是收集死对象?

通过监视过去几天全新 .NET 4.5 服务器应用程序的 CLR #Bytes in all Heaps 性能计数器,我可以注意到一种模式,使我认为 Gen2 集合不是总是收集死对象,但我无法理解到底发生了什么. 服务器应用程序正在 .NET Framework 4.5.1 中使用服务器 GC/后台运行. 这是一个作为 Windows 服务托管的控制台应用程序(在 Topshelf 框 ..
发布时间:2021-11-26 11:30:57 C#/.NET

.NET 4.0 中非常高的内存使用率

我有一个 C# Windows 服务,我最近从 .NET 3.5 转移到了 .NET 4.0.没有进行其他代码更改. 在 3.5 上运行时,给定工作负载的内存利用率约为 1.5 GB 内存,吞吐量为每秒 20 倍.(在这个问题的上下文中,X 无关紧要.) 在 4.0 上运行的完全相同的服务使用 3GB 到 5GB+ 的内存,每秒不到 4 X.事实上,随着内存使用量不断攀升,该服务通常最 ..
发布时间:2021-11-26 10:51:39 C#/.NET

在 C# 中监控垃圾收集器

我有一个 WPF 应用程序,它遇到了很多性能问题.其中最糟糕的是,有时应用程序会在再次运行之前冻结几秒钟. 我目前正在调试应用程序以查看此冻结可能与什么有关,并且我认为可能导致它的原因之一是垃圾收集器.由于我的应用程序运行在一个非常有限的环境中,我相信垃圾收集器在运行时可以使用机器的所有资源,而不会为我们的应用程序留下任何资源. 为了验证这个假设,我找到了这些文章:垃圾收集通知和 .N ..
发布时间:2021-11-26 09:59:38 C#/.NET

Java 垃圾收集器 - 什么时候收集?

是什么决定了垃圾收集器实际收集的时间?它是在一段时间后还是在一定数量的内存用完后发生?还是有其他因素? 解决方案 它在确定需要运行时运行.分代垃圾收集器中的一个常见策略是在第 0 代内存分配失败时运行收集器.也就是说,每次分配一小块内存(大块通常直接放入“老"代)时,系统会检查 gen-0 堆中是否有足够的空闲空间,如果没有,则运行GC 来释放空间以便分配成功.然后将旧数据移动到第 1 代 ..
发布时间:2021-11-25 20:46:51 Java Web开发

java中的垃圾收集器-将对象设置为null

假设有一个 Tree 对象,有一个 TreeNode 根对象,每个 TreeNode 都有 leftNode 和 rightNode 对象(例如一个 BinaryTree 对象) 如果我打电话: myTree = null; 树中相关的 TreeNode 对象到底发生了什么?也会被垃圾收集,或者我必须将树对象内的所有相关对象设置为空?? 解决方案 Java 中的垃圾收集是基于“可 ..
发布时间:2021-11-25 19:28:33 Java Web开发

Java 垃圾收集日志消息

我已将 Java 配置为将垃圾收集信息转储到日志中(verbose GC).我不确定日志中的垃圾收集条目是什么意思.下面发布了这些条目的示例.我在 Google 上四处搜索,但没有找到可靠的解释. 我有一些合理的猜测,但我正在寻找答案,这些答案对条目中的数字的含义提供了严格的定义,并得到了可靠来源的支持.对引用 sun 文档的所有答案自动 +1.我的问题是: PSYoungGen 指的 ..
发布时间:2021-11-25 18:33:35 Java Web开发