garbage-collection相关内容
Java 自动调用垃圾收集器,那为什么我们需要手动调用垃圾收集器呢?什么时候应该使用 System.gc() 解决方案 Java 自动调用垃圾收集器,那为什么我们需要手动调用垃圾收集器呢? 我们不需要它们.实际上,在大多数情况下调用 System.gc() 对应用程序性能有害.请参阅我对 “为什么会这样"的回答调用系统 gc 是一种不好的做法" 以获得详细说明. 什么时候应
..
我正在阅读一个非常大的文件并从每一行中提取一些文本的一小部分.然而,在手术结束时,我只剩下很少的内存可以使用了.似乎垃圾收集器在读入文件后无法释放内存. 我的问题是:有没有办法释放这个内存?或者这是一个 JVM 错误? 我创建了一个 SSCCE 来证明这一点.它读入一个 1 mb(Java 中为 2 mb,由于 16 位编码)文件,并从每一行中提取一个字符(约 4000 行,因此应该约
..
在回答关于 SO 的另一个问题* 以及随后的评论讨论时,我遇到了一个我不清楚的问题. 在我误入歧途的任何地方纠正我...... 当垃圾收集器收集一个对象时,它会在单独的线程上调用该对象的终结器(除非终结器已被抑制,例如通过 Dispose() 方法).收集时,GC 会挂起除触发收集的线程之外的所有线程(后台收集除外). 不清楚的地方: 垃圾收集器在收集之前是否等待终结器对该
..
Object.finalize() 在 Java 9 中已被弃用,我想我明白其中的原因,但我很难看到如何替换它. 我有一个名为 Configuration 的实用程序类,它本质上只有一个实例,它拥有应用程序中的所有内容并在应用程序期间持续存在.它提供的服务之一是记录:在第一次请求记录消息时,会创建一个记录器(由于各种遗留原因,它是我自己的记录器而不是标准记录器),并在配置对象的字段中保存一个
..
我有点困惑如何彻底清理我的垃圾...... git count-objects -v -H 警告:发现垃圾:./objects/pack/gc_7174754666377259454.idx_tmp警告:发现垃圾:./objects/pack/gc_7174754666377259454.pack_tmp警告:发现垃圾:./objects/pack/pack-f5b13f50fe2e4d7
..
我最近和一位同事讨论了 Dispose 的值和实现 IDisposable 的类型. 我认为为应该尽快清理的类型实现 IDisposable 是有价值的,即使没有要清理的非托管资源. 我的同事想法不同;如果您没有任何非托管资源,则无需实施 IDisposable,因为您的类型最终会被垃圾回收. 我的论点是,如果您有一个想要尽快关闭的 ADO.NET 连接,那么实现 IDispos
..
我今天一直在试验 jmap -histo 和 jmap -dump 按此顺序运行时 jmap -dump:format=b,file=heap.1 [pid]jmap -dump:live,format=b,file=heap.2 [pid]jmap -dump:format=b,file=heap.3 [pid] heap.3 更类似于 heap.2 而不是 heap.1.特别是,我对
..
我知道 JavaScript 有一个垃圾收集器.因此,使用delete只删除一个对该对象的引用,当没有对该对象的引用时,它被GC删除. JavaScript 很棘手,由于闭包、模糊的命名空间和原型继承,知道什么时候到现在或为什么并不总是很明显. 我正在编写一个相当大的 JavaScript 项目,并希望避免内存泄漏,同时限制全局内存使用.我根本不在优化阶段(让我们先让这些东西工作:-)
..
我们正在创建多个子类加载器,以将多个子应用程序加载到 Java 应用程序“容器"中,对热部署进行原型设计.当特定类加载器的类路径发生更改(即添加、删除、更新 jar)时,旧的类加载器将被丢弃(未引用),并为新的 jar 类路径创建一个新的类加载器. 更新类路径后,触发热部署,我们进行了堆转储.堆转储(使用内存分析器)表明旧的类加载器没有被垃圾收集.父类加载器中的某些类正在缓存旧的类加载器.调
..
我有一个最近从 .NET 3.5 迁移到 .NET 4.0 的 C# Windows 服务.没有进行其他代码更改. 在 3.5 上运行时,给定工作负载的内存利用率大约为 1.5 GB 内存,吞吐量为每秒 20 X.(在这个问题的上下文中,X 无关紧要.) 在 4.0 上运行的完全相同的服务使用 3GB 到 5GB+ 的内存,每秒速度不到 4 X.事实上,随着内存使用量继续攀升,服务通常
..
假设我用 Java 方法创建了一个临时文件 File tmp = File.createTempFile(prefix, suffix); 如果我没有显式调用 delete() 方法,文件什么时候会被删除? 作为一种直觉,它可能是在 JVM 终止时,或 较早(由垃圾收集器)或 较晚(由某些操作系统清理进程). 解决方案 文件不会被自动删除,从 JavaDoc: 此方法仅提供
..
我仍在调查我在 GC 调优方面遇到的问题(请参阅 之前的问题),涉及大量阅读和实验. Sun Java5+ JVM 尝试根据其环境自动选择最佳 GC 策略和参数,这很棒,但我不知道如何查询正在运行的 JVM 以找出这些参数是什么. 理想情况下,我想看看虚拟机自动选择的各种与 GC 相关的 -XX 选项的值.如果我有这个,我可以有一个基线来开始调整. 有人知道从正在运行的 VM 中
..
来自 J.布洛赫 ... 内存泄漏的来源是听众... 最好的方法来确保回调被垃圾收集及时是只存储弱对它们的引用,例如,通过仅将它们作为键存储在WeakHashMap. 那么,为什么 Java Collections 框架中没有 WeakSet? 解决方案 Collections.newSetFromMap 设置弱哈希集 =Collections.newSetFromMap(n
..
我有以下代码: public void Dispose(){if (_instance != null){_instance = null;//调用 GC.SupressFinalize 使这个对象脱离终结//排队并阻止该对象的终结代码//执行第二次.GC.SuppressFinalize(this);}} 虽然有一条注释解释了与 GC 相关的调用的目的,但我仍然不明白为什么会出现. 当
..
我不明白垃圾收集上下文中的“世代"是什么.谁能简单的解释一下? 解决方案 来自 了解 .NET 中的垃圾回收 世代 分代垃圾收集器多收集短命的对象经常比寿命更长的.短期对象存储在第一代,0代.寿命更长的物体被推入更高的世代,1 或 2.垃圾收集器工作更多经常在低代比更高的. 当一个对象第一次被创建时,它是放入第 0 代.当第0代被填满,垃圾收集器被调用.那些对象在垃圾收集
..
我想出了 function keysToLowerCase (obj) {var keys = Object.keys(obj);var n = keys.length;而(n--){变种键=键[n];//“缓存"它,以减少对数组的查找if (key !== key.toLowerCase()) {//可能已经是小写版本obj[key.toLowerCase()] = obj[key]//将值交
..
几乎每个人最终都会遇到 Java 的 GC 问题. 是否有针对 Java 调整 GC 的食谱指南或半自动化工具? 我的理由是: 几乎所有人最终都会遇到这些问题 有许多可能的因素(比如 20 个),其中只有少数会影响您的问题. 大多数人不知道如何识别关键因素,因此 GC 调优更像是一门魔法而不是一门科学. 并非所有人都使用 HotSpot 虚拟机.不同的 Sun 版本具有不同
..
我来自 C++ 背景,我已经使用 C# 工作了大约一年.像许多其他人一样,我对为什么确定性资源管理没有内置在语言中感到困惑.我们有 dispose 模式,而不是确定性析构函数.人们开始怀疑通过他们的代码传播 IDisposable 癌症是否值得付出努力. 在我偏向 C++ 的大脑中,使用带有确定性析构函数的引用计数智能指针似乎是垃圾收集器的一大进步,垃圾收集器需要您实现 IDisposabl
..
可能重复: 弱引用 - 它们有多大用处? 既然垃圾收集器可以随时声明弱引用,那么使用它们有什么实际理由吗? 解决方案 如果你想保留对某个东西的引用,只要它在其他地方使用,例如一个监听器,你可以使用弱引用. WeakHashMap 可用作派生数据的键的短暂缓存.它还可以用于保存有关在其他地方使用的对象的信息,并且您不知道这些对象何时被丢弃. 顺便说一句,软引用类似于弱引用
..
我有一个 Haskell 程序,它处理一个文本文件并构建一个 Map(包含数百万个元素).整个过程可以运行2-3分钟.我发现调整 -H 和 -A 选项会对运行时间产生很大影响. 有 有关 RTS 功能的文档,但对我来说很难阅读,因为我不了解 GC 理论中的算法和术语.我正在寻找一个技术含量较低的解释,最好是针对 Haskell/GHC.有没有关于为这些选项选择合理值的参考资料? 编辑:
..