garbage-collection相关内容
..
我刚刚遇到了一个奇怪的效果,在跟踪它时,我注意到收集内部嵌套类与静态嵌套类似乎存在很大的性能差异.考虑这个代码片段: 公共类测试{私有类指针 {长数据;指针下一个;}私有指针优先;公共静态无效主要(字符串[]参数){测试 t = null;for (int i = 0; i 所以代码所做的是使用内部类创建一个链表.该过程重复 500 次(出于测试目的),丢弃上次运行中使用的对象(这些对象会受
..
它 是 不 可能在VM启动后增加Java堆的最大大小.造成这种情况的技术原因是什么?垃圾收集算法是否依赖于使用固定数量的内存?还是出于安全原因,通过消耗所有可用内存来防止 Java 应用程序对系统上的其他应用程序执行 DOS 操作? 解决方案 在 Sun 的 JVM 中,最后我知道,整个堆必须分配在一个连续的地址空间中.我想对于大堆值,在启动后添加到您的地址空间同时确保它保持连续是非常困难
..
我将 1 个实例(2 个 vCPU,2GB RAM,负载 ~4k req/sec)切换到 Java 9(来自最新的 Java 8).有一段时间,一切都很好,CPU使用率和以前一样.但是,大约 6 小时后,CPU 消耗无缘无故地增加了 4%(从 21% 到 25%).我没有流量高峰,没有内存消耗增加,没有指标变化(我在代码中的每个方法都有计数器).什么都没有. 我让这个实例保持原样大约 12
..
主要问题在主题中,但让我展示一下我对 Java 中完成过程的看法,以便我可以问你更多问题. gc 通过标记所有活动对象开始垃圾收集.当所有可达对象都被标记为“活动"时.所有其他对象都无法访问.下一步是检查每个无法到达的对象,并确定它是否可以立即被清扫,或者应该首先完成.如果对象的 finalize 方法有一个主体,那么 gc 会考虑下一个方法,那么这个对象是可终结的并且应该被终结;如果对象的
..
所以如果我理解得很好,垃圾收集会自动释放程序不再使用的对象.就像java中的垃圾收集器. 我听说在不支持垃圾回收的 C 等语言中,程序可能会发生内存泄漏并随后耗尽内存. 那么程序员在不支持垃圾收集的 C 等语言中犯了什么错误?我猜想在不再使用对象后不会释放对象.但是,由于缺少垃圾收集器,我们会犯的唯一错误是这些吗? 解决方案 描述你需要的东西 不释放你不再需要的东西(
..
我一直在研究和使用 C++11 的不同功能,特别是在 Visual Studio 2010 中. 提到的一件事是最少的垃圾收集: 根据这篇博文,VC10支持这个功能. 我的测试表明,在丢失的对象上没有调用析构函数,因此我不确定它们的内存位置是否已被释放或是否正在泄漏. 我无意以任何方式依赖它,但找不到关于其行为的直接、明确的答案. 解决方案 Minimal GC s
..
我有一个名为 Population 的列表,它包含了很多职位,但在某些时候我会停止使用它.如何释放资源?那么这是部分代码: 私有列表 人口=新列表 ();人口.SomeMethod();人口.清除(); 我使用了 Clear 方法,但不起作用.有什么想法吗? 解决方案 问题可能是 Clear 没有按照你的想法做.Clea
..
据我所知,在 C# 中,ref 和 out 参数是通过仅传递相关值的原始地址来传递的.该地址可能是指向数组中的元素或对象中的字段的内部指针. 如果发生垃圾回收,可能仅引用某个对象是通过这些内部指针之一,如: 使用系统;公共课 Foo{公共 int 字段;公共静态无效增量(参考 int x){System.GC.Collect();x = x + 1;Console.WriteLine(x)
..
我是否需要将 MyAction 设置为 null 以便垃圾收集能够继续处理这些类中的任何一个? 当两个班级的寿命几乎相同时,我不太担心.当 Class1 的寿命比 Class2 长得多或 Class2 的寿命比 Class1 长得多时,我的问题更合适. 这里的代码被精简了.假设 Class1 和 Class2 都包含可能影响其生命周期的其他成员和方法. 公共类 Class1:IDis
..
我正在努力了解和获取有关 CMS 终身收集周期中涉及的步骤的更多详细信息. 首字母标记 并发标记 并发预清理 重新标记 并发扫描 并发重置 在很多地方都非常简短地解释了这些步骤.但是,如果我必须在带有图表和伪示例的类中描述它们,我可以从哪里获得这些信息? PS - 我在 Google 上进行了广泛搜索,其中包含很多我理解的文字内容和行话.但我正在寻找更生动的解释,以便我
..
我目前正在调查我的 Android 应用程序的垃圾收集问题,我很想知道 GC_FOR_ALLOC 是否表明存在比其他 GC 消息(例如 GC_CONCURRENT)更大的问题. 据我了解,GC_CONCURRENT 正在做垃圾收集器应该做的事情.堆已达到特定限制,最好清理内存. GC_FOR_ALLOC 向我表明,如果我试图创建一个对象并且没有剩余内存可以做,那么会发生更严重的事情.
..
我有一个 js 函数,用于使用音频接口播放任何给定的声音(为每个调用创建一个新实例). 这工作得很好,直到大约第 32 次调用(有时更少).此问题与 Audio 实例的发布直接相关.我知道这一点是因为我已经让 Chromium 中的 GC 有时间运行,它可以让我再次播放另外 32 种左右的声音. 这是我正在做的一个例子:
..
我有 List 对象.我该如何处理清单? 例如, 列表usersCollection =新列表();用户 user1 = 新用户();用户 user2 = 新用户()userCollection.Add(user1);userCollection.Add(user2); 如果我设置 userCollection = null; 会发生什么? foreach(userCo
..
我有一个 Python2.7 应用程序,它使用了很多 dict 对象,这些对象主要包含键和值的字符串. 有时不再需要这些字典和字符串,我想将它们从内存中删除. 我尝试了不同的东西,del dict[key]、del dict 等.但是应用程序仍然使用相同的内存量. 下面是一个我希望为内存付费的示例.但它没有:( 导入 gc导入资源定义内存():print('内存使用:% 2.2
..
我目前正在开发一个网站,该网站大量使用缓存数据来避免往返.在启动时,我们得到一个“大"图(数百个不同种类的对象).这些对象通过 WCF 检索并反序列化(我们使用协议缓冲区进行序列化)我正在使用 redgate 的内存分析器来调试内存问题(内存似乎不适合我们“在"完成初始化并最终得到此报告后需要多少内存 现在我们可以从这份报告中收集到的是: 1) .NET 分配的大部分内存都是免费的(它
..
我们的一个程序有时会在一个用户的机器上出现 OutOfMemory 错误,但在我测试它时当然不会.我只是用 JProfiler 运行它(在 10 天评估许可证上,因为我以前从未使用过它),并过滤我们的代码前缀,总大小和实例数量的最大块是特定简单类的 8000+ 个实例. 我单击了 JProfiler 上的“垃圾收集"按钮,我们其他类的大多数实例都消失了,但这些特定的实例没有.我再次运行测试,
..
我们最近遇到了一种情况,我们的一个生产 JVM 会随机冻结.Java 进程正在消耗 CPU,但所有可见活动都将停止:没有日志输出、没有任何内容写入 GC 日志、没有对任何网络请求的响应等.进程将一直保持这种状态,直到重新启动. 事实证明,当在某些输入上调用 org.mozilla.javascript.DToA 类时,会感到困惑并以巨大的值(例如 5^2147483647)调用 BigInt
..
我正在阅读有关 JVM 调优的文章,我突然想到 JVM 在执行 GC 时会不断移动对象.但是 Java 对象之间存在相互引用,人们会认为这是作为指针实现的,但是 JVM 不可能在每次移动对象后遍历整个堆,并更新所有引用;这肯定会永远持续下去.那么,如果引用没有改变,但对象的物理位置发生了变化,它如何解析引用呢? 我已经阅读了很多关于 JVM 的文章,但从未在任何地方解释过,甚至没有暗示过.
..
我有一个使用自定义适配器的 ListView.自定义适配器的 getView 使用所有推荐的做法: @Overridepublic View getView(int position, View convertView, ViewGroup parent) {SuscriptionsViewsHolder 持有者;ItemInRootList item = mItemsInList.get(po
..