garbage-collection相关内容

Young , Tenured 和 Perm 一代

我对 Heap、Young、Tenured 和 Perm 一代感到困惑. 谁能解释一下? 解决方案 Java 垃圾收集器被称为Generational Garbage Collector.应用程序中的对象存在不同的时间长度,具体取决于它们的创建位置和使用方式.这里的关键见解是,对短期和长期对象使用不同的垃圾收集策略可以针对每种情况专门优化 GC. 粗略地说,随着对象在年轻一代中 ..
发布时间:2022-01-16 09:58:34 Java开发

如何检测在 JavaScript 中触发垃圾收集的内存分配?

在寻找 JavaScript 库(铆钉)中的性能问题时,我发现垃圾收集在一次运行中发生了 3 到 4 次,占用了大约 15% 的执行时间(使用 Chrome DevTools JS Profile). 由于垃圾回收的原因,至少有 30 个地方创建了临时函数/对象作为潜在候选对象. 我想知道是否有办法找到负责分配被垃圾回收的内存的函数,这样我就可以专注于我的性能调整. 我记录了堆分 ..

使用 Object Initializer 的复活区别

我有这个代码: 本质上,我是在尝试演示 c# 终结器的使用并制作一个不会死的对象,我称它为 Zombie.现在,通常这个演示效果很好,但今天我尝试使用与对象初始化程序相同的代码,而不是仅仅分配给属性(在这种情况下为名称).我注意到有区别.也就是说,终结器永远不会被调用,即使我正在尽我最大的努力让垃圾收集器完成它的工作. 谁能解释一下区别,或者我在 C# 编译器中发现了一个错误? ..
发布时间:2022-01-16 09:58:14 C#/.NET

如何在 Java 中手动进行长时间的 Full GC

如何编写一些代码将对象分配到 Old Gen 中,导致 Full GC 时间超过三五秒? 解决方案 “将对象分配到 Old Gen"和“长时间的 GC 暂停"很难结合起来,因为你可以对垃圾收集器做的最糟糕的事情就是创建许多小的、链接的、活动的对象,形成垃圾收集器必须遍历的图. 但是小对象不会分配到旧代中.只有大对象,例如数组,直接分配到旧代中,但这些不会对 GC 造成太大压力.尤其是 ..
发布时间:2022-01-16 09:58:06 Java开发

如果我们覆盖 finalize 方法,为什么可以增加分配阶段?

我听说在 Joshua Bloch 写的书中,如果我们重写 finalize 方法,分配和内存收集可能会增加到 430 次. 对我来说很明显,内存收集可能会更慢,因为 gc 需要额外的迭代来释放内存. 但是为什么分配阶段可以增加呢? 解决方案 我已经搜索了原文: 在我的机器上,创建和销毁一个简单对象的时间大约是5.6 纳秒.添加终结器会将时间增加到 2,400 ns.换句 ..

什么时候对象会被垃圾回收?

在 C# 中,当没有对它的引用时,对象会被垃圾回收.假设是这种情况,是否会收集以下任何一种,或者垃圾收集器是否足够聪明,可以同时丢弃它们? 类程序{静态无效主要(){A a = 新 A();a.b = 新 B();a.b.a = a;一个=空;}{A级{公共 B b;}B类{公开的一个;} 解决方案 一旦不再需要它们,它们都将有资格获得收集.这意味着在某些情况下,甚至可以在定义对象的范围结束 ..
发布时间:2022-01-16 09:57:46 C#/.NET

堆栈内存上的 free()

我在 Solaris 上支持一些 c 代码,而且我看到了一些奇怪的东西,至少我认为是这样的: char new_login[64];...strcpy(new_login, (char *)login);...免费(新登录); 我的理解是,由于变量是一个本地数组,内存来自堆栈,不需要被释放,而且由于没有使用 malloc/calloc/realloc,所以行为是未定义的. 这是一个实时系 ..
发布时间:2022-01-16 09:57:38 其他开发

复合对象上的python垃圾收集器行为

如果复合对象的某些部分仍然被引用,python 垃圾收集器是否会清理它 例如 def foo():A = [ [1, 3, 5, 7], [2, 4, 6, 8]]返回 A[1]B = 富() A[0] 会被垃圾回收吗? 有没有办法通过代码确认? 解决方案 Nothing 引用列表 A 和嵌套列表 A[0],所以是的,它们会从内存中删除. A[1] 引用的嵌套列表对象 ..
发布时间:2022-01-16 09:57:29 Python

同步运行 GC.Collect

GC.Collect 似乎在后台线程中启动垃圾收集,然后立即返回.如何同步运行 GC.Collect - 即等待垃圾收集完成? 这是在 NUnit 测试的上下文中.我尝试将 gcConcurrent 设置添加到我的测试程序集的 app.config 文件中,我对 nunit.exe.config 进行了同样的尝试.两者都没有任何效果——当我调试时,我仍然可以看到终结器在“GC终结器线程"上运 ..
发布时间:2022-01-16 09:57:21 C#/.NET

是什么阻止了 C# 中的线程被收集?

在 .NET 中,在这段代码之后,什么机制可以阻止 Thread 对象被垃圾回收? new Thread(Foo).Start();GC.Collect(); 是的,假设 something 引用了该线程是安全的,我只是在徘徊到底是什么.由于某种原因,Reflector 没有向我显示 System.Threading,所以我自己无法挖掘它(我知道 MS 发布了 .NET 框架的源代码,我只是手 ..
发布时间:2022-01-16 09:57:10 C#/.NET

垃圾收集不会减少当前内存使用量 - 在释放模式下.为什么?

我构建了一个快速程序,该程序需要遍历一个巨大的日志文件(几百万条记录)并从内部查找各种零碎的内容.由于数据量如此之大,我一直好奇地查看我的 Windows 任务管理器性能选项卡,看看正在使用多少 CPU 和内存. 程序成功获得我的结果后,CPU 使用率明显下降.但是在执行过程中看到我的内存使用量慢慢上升到几 GB 后,它保持不变. 我尝试在函数结束时调用 GC.Collect(),尝试 ..
发布时间:2022-01-16 09:57:01 C#/.NET

将流类或连接视为 Java 中的资源泄漏

Java 没有对象的生命周期,这由 garbage collector 管理.如果我使用一些 IO 类而不关闭它,或者一些 DBConnection,这会被认为是资源泄漏吗?换句话说,IO对象是否会被垃圾收集器AFAIK收集和销毁,垃圾收集器仅用于内存.例如: BufferedReader br = new BufferedReader(new FileReader(new File("path ..
发布时间:2022-01-16 09:56:37 Java开发

使用 Java 7 进行逃逸分析/堆栈分配的资格

我正在用 转义分析,以便更好地了解哪些对象有资格进行堆栈分配. 这是我为测试堆栈分配而编写的代码: import java.util.ArrayList;导入 java.util.Iterator;公共类逃逸分析{私有静态最终 long TIME_TO_TEST = 10L * 1000L;//10 秒静态类时间戳{私人长米;公共时间戳(长毫秒){this.millis = 毫;}公共长 ..
发布时间:2022-01-16 09:56:10 Java开发

Java 垃圾收集器 G1GC 需要很长时间才能完成“对象复制"(撤离暂停)

我不是 Java 新手,但我对垃圾收集知之甚少.现在我想通过一些实际经验来改变这一点.我的目标是延迟低于 0.3 秒,或者在极端情况下 0.5 秒也可以. 我有一个带有 -Xmx50gb (-Xms50gb) 的应用程序并设置了以下其他 GC 选项: -XX:+UseG1GC -Xloggc:somewhere.gc.log -XX:+PrintGCDateStamps 但现在由于垃圾收 ..
发布时间:2022-01-16 09:56:01 Java开发

PowerShell 管道正在执行时没有垃圾收集

更新: PowerShell 5 似乎解决了以下错误.错误仍然存​​在于 3 和 4 中.因此,除非您正在运行 PowerShell 2 或5. 考虑以下代码片段: 函数 Get-DummyData() {对于 ($i = 0; $i -lt 10000000; $i++) {“这太可怕了!我是忍者!更多的话,耶!"}}获取虚拟数据 |外空 这将导致 PowerShell 内存使用量无法 ..
发布时间:2022-01-16 09:55:32 其他开发

什么时候需要 Dispose?

当你有这样的代码时: 位图 bmp = 新位图 (100, 100);图形 g = Graphics.FromImage ( bmp );Pen p = new Pen (Color.FromArgb (128, Color.Blue), 1);Brush b = new SolidBrush (Color.FromArgb (128, Color.Blue));g.FillEllipse ( ..
发布时间:2022-01-16 09:55:13 C#/.NET

new Thread() 和垃圾回收

我有以下代码: new Thread(new ThreadStart(delegate(){而(真){//某物}})).开始(); 垃圾收集器能否在 Running 状态下结束这个 Thread 实例? 解决方案 CLR 跟踪所有正在运行的线程.只要有对对象的引用,它们就不会被垃圾收集.由于 CLR 保留对所有正在运行的线程的引用,因此 GC 不会触及它们. ..
发布时间:2022-01-16 09:54:59 C#/.NET

java - 垃圾收集器如何快速知道哪些对象不再引用它们?

我知道在 Java 中,如果一个对象不再有任何对它的引用,垃圾收集器会在一段时间后回收它. 但是垃圾收集器如何知道一个对象有没有关联的引用呢? 垃圾收集器是否使用某种 hashmap 或表? 编辑: 请注意,我不是在问 gc 的工作原理.真的,我不是在问这个. 我要特别地询问 gc 如何高效地知道哪些对象是活动的,哪些是死的. 这就是为什么我在我的问题中说 gc ..
发布时间:2022-01-16 09:54:49 Java开发