garbage-collection相关内容

内部类与静态嵌套类的 GC 性能下降

我刚刚遇到了一个奇怪的效果,在跟踪它时,我注意到收集内部嵌套类与静态嵌套类似乎存在很大的性能差异.考虑这个代码片段: 公共类测试{私有类指针 {长数据;指针下一个;}私有指针优先;公共静态无效主要(字符串[]参数){测试 t = null;for (int i = 0; i 所以代码所做的是使用内部类创建一个链表.该过程重复 500 次(出于测试目的),丢弃上次运行中使用的对象(这些对象会受 ..
发布时间:2022-01-16 10:20:24 Java开发

为什么 Java 堆的最大大小是固定的?

它 是 不 可能在VM启动后增加Java堆的最大大小.造成这种情况的技术原因是什么?垃圾收集算法是否依赖于使用固定数量的内存?还是出于安全原因,通过消耗所有可用内存来防止 Java 应用程序对系统上的其他应用程序执行 DOS 操作? 解决方案 在 Sun 的 JVM 中,最后我知道,整个堆必须分配在一个连续的地址空间中.我想对于大堆值,在启动后添加到您的地址空间同时确保它保持连续是非常困难 ..
发布时间:2022-01-16 10:20:14 Java开发

为什么在 Java 9 G1 工作约 6 小时后性能会下降,而负载却没有实际增加?

我将 1 个实例(2 个 vCPU,2GB RAM,负载 ~4k req/sec)切换到 Java 9(来自最新的 Java 8).有一段时间,一切都很好,CPU使用率和以前一样.但是,大约 6 小时后,CPU 消耗无缘无故地增加了 4%(从 21% 到 25%).我没有流量高峰,没有内存消耗增加,没有指标变化(我在代码中的每个方法都有计数器).什么都没有. 我让这个实例保持原样大约 12 ..
发布时间:2022-01-16 10:20:06 Java开发

在 Java 中如何将对象标记为 finalized(以便第二次不会调用 finalize 方法)?

主要问题在主题中,但让我展示一下我对 Java 中完成过程的看法,以便我可以问你更多问题. gc 通过标记所有活动对象开始垃圾收集.当所有可达对象都被标记为“活动"时.所有其他对象都无法访问.下一步是检查每个无法到达的对象,并确定它是否可以立即被清扫,或者应该首先完成.如果对象的 finalize 方法有一个主体,那么 gc 会考虑下一个方法,那么这个对象是可终结的并且应该被终结;如果对象的 ..
发布时间:2022-01-16 10:19:57 Java开发

垃圾收集与非垃圾收集编程语言

所以如果我理解得很好,垃圾收集会自动释放程序不再使用的对象.就像java中的垃圾收集器. 我听说在不支持垃圾回收的 C 等语言中,程序可能会发生内存泄漏并随后耗尽内存. 那么程序员在不支持垃圾收集的 C 等语言中犯了什么错误?我猜想在不再使用对象后不会释放对象.但是,由于缺少垃圾收集器,我们会犯的唯一错误是这些吗? 解决方案 描述你需要的东西 不释放你不再需要的东西( ..
发布时间:2022-01-16 10:19:47 Java开发

C++11 中的垃圾回收

我一直在研究和使用 C++11 的不同功能,特别是在 Visual Studio 2010 中. 提到的一件事是最少的垃圾收集: 根据这篇博文,VC10支持这个功能. 我的测试表明,在丢失的对象上没有调用析构函数,因此我不确定它们的内存位置是否已被释放或是否正在泄漏. 我无意以任何方式依赖它,但找不到关于其行为的直接、明确的答案. 解决方案 Minimal GC s ..

C# 中的大列表使用了多少空闲内存?

我有一个名为 Population 的列表,它包含了很多职位,但在某些时候我会停止使用它.如何释放资源?那么这是部分代码: 私有列表 人口=新列表 ();人口.SomeMethod();人口.清除(); 我使用了 Clear 方法,但不起作用.有什么想法吗? 解决方案 问题可能是 Clear 没有按照你的想法做.Clea ..
发布时间:2022-01-16 10:19:26 C#/.NET

C# 垃圾收集器如何找到唯一引用是内部指针的对象?

据我所知,在 C# 中,ref 和 out 参数是通过仅传递相关值的原始地址来传递的.该地址可能是指向数组中的元素或对象中的字段的内部指针. 如果发生垃圾回收,可能仅引用某个对象是通过这些内部指针之一,如: 使用系统;公共课 Foo{公共 int 字段;公共静态无效增量(参考 int x){System.GC.Collect();x = x + 1;Console.WriteLine(x) ..
发布时间:2022-01-16 10:18:59 C#/.NET

C# 动作、闭包和垃圾回收

我是否需要将 MyAction 设置为 null 以便垃圾收集能够继续处理这些类中的任何一个? 当两个班级的寿命几乎相同时,我不太担心.当 Class1 的寿命比 Class2 长得多或 Class2 的寿命比 Class1 长得多时,我的问题更合适. 这里的代码被精简了.假设 Class1 和 Class2 都包含可能影响其生命周期的其他成员和方法. 公共类 Class1:IDis ..
发布时间:2022-01-16 10:18:52 C#/.NET

并发标记和扫描算法详细信息

我正在努力了解和获取有关 CMS 终身收集周期中涉及的步骤的更多详细信息. 首字母标记 并发标记 并发预清理 重新标记 并发扫描 并发重置 在很多地方都非常简短地解释了这些步骤.但是,如果我必须在带有图表和伪示例的类中描述它们,我可以从哪里获得这些信息? PS - 我在 Google 上进行了广泛搜索,其中包含很多我理解的文字内容和行话.但我正在寻找更生动的解释,以便我 ..
发布时间:2022-01-16 10:18:43 Java开发

GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时?

我目前正在调查我的 Android 应用程序的垃圾收集问题,我很想知道 GC_FOR_ALLOC 是否表明存在比其他 GC 消息(例如 GC_CONCURRENT)更大的问题. 据我了解,GC_CONCURRENT 正在做垃圾收集器应该做的事情.堆已达到特定限制,最好清理内存. GC_FOR_ALLOC 向我表明,如果我试图创建一个对象并且没有剩余内存可以做,那么会发生更严重的事情. ..
发布时间:2022-01-16 10:18:38 Java开发

Javascript强制GC收集?/强制释放对象?

我有一个 js 函数,用于使用音频接口播放任何给定的声音(为每个调用创建一个新实例). 这工作得很好,直到大约第 32 次调用(有时更少).此问题与 Audio 实例的发布直接相关.我知道这一点是因为我已经让 Chromium 中的 GC 有时间运行,它可以让我再次播放另外 32 种左右的声音. 这是我正在做的一个例子: ..
发布时间:2022-01-16 10:18:30 前端开发

处理列表的最佳方式

我有 List 对象.我该如何处理清单? 例如, 列表usersCollection =新列表();用户 user1 = 新用户();用户 user2 = 新用户()userCollection.Add(user1);userCollection.Add(user2); 如果我设置 userCollection = null; 会发生什么? foreach(userCo ..
发布时间:2022-01-16 10:18:20 C#/.NET

在 Python 中强制垃圾收集以释放内存

我有一个 Python2.7 应用程序,它使用了很多 dict 对象,这些对象主要包含键和值的字符串. 有时不再需要这些字典和字符串,我想将它们从内存中删除. 我尝试了不同的东西,del dict[key]、del dict 等.但是应用程序仍然使用相同的内存量. 下面是一个我希望为内存付费的示例.但它没有:( 导入 gc导入资源定义内存():print('内存使用:% 2.2 ..
发布时间:2022-01-16 10:18:13 Python

.NET 可用内存使用情况(如何防止过度分配/释放内存给操作系统)

我目前正在开发一个网站,该网站大量使用缓存数据来避免往返.在启动时,我们得到一个“大"图(数百个不同种类的对象).这些对象通过 WCF 检索并反序列化(我们使用协议缓冲区进行序列化)我正在使用 redgate 的内存分析器来调试内存问题(内存似乎不适合我们“在"完成初始化并最终得到此报告后需要多少内存 现在我们可以从这份报告中收集到的是: 1) .NET 分配的大部分内存都是免费的(它 ..
发布时间:2022-01-16 10:18:07 C#/.NET

我怎样才能弄清楚是什么保留了未释放的对象?

我们的一个程序有时会在一个用户的机器上出现 OutOfMemory 错误,但在我测试它时当然不会.我只是用 JProfiler 运行它(在 10 天评估许可证上,因为我以前从未使用过它),并过滤我们的代码前缀,总大小和实例数量的最大块是特定简单类的 8000+ 个实例. 我单击了 JProfiler 上的“垃圾收集"按钮,我们其他类的大多数实例都消失了,但这些特定的实例没有.我再次运行测试, ..
发布时间:2022-01-16 10:18:02 Java开发

当 JVM 无法到达安全点时如何获取 Java 堆栈

我们最近遇到了一种情况,我们的一个生产 JVM 会随机冻结.Java 进程正在消耗 CPU,但所有可见活动都将停止:没有日志输出、没有任何内容写入 GC 日志、没有对任何网络请求的响应等.进程将一直保持这种状态,直到重新启动. 事实证明,当在某些输入上调用 org.mozilla.javascript.DToA 类时,会感到困惑并以巨大的值(例如 5^2147483647)调用 BigInt ..
发布时间:2022-01-16 10:17:45 其他开发

如果 JVM 在进行 GC 时不断移动对象,它如何解析引用?

我正在阅读有关 JVM 调优的文章,我突然想到 JVM 在执行 GC 时会不断移动对象.但是 Java 对象之间存在相互引用,人们会认为这是作为指针实现的,但是 JVM 不可能在每次移动对象后遍历整个堆,并更新所有引用;这肯定会永远持续下去.那么,如果引用没有改变,但对象的物理位置发生了变化,它如何解析引用呢? 我已经阅读了很多关于 JVM 的文章,但从未在任何地方解释过,甚至没有暗示过. ..
发布时间:2022-01-16 10:17:40 Java开发