寻找垃圾收集根[关闭]

     2023-03-06     215

关键词:

【中文标题】寻找垃圾收集根[关闭]【英文标题】:Finding garbage collection roots [closed] 【发布时间】:2016-08-19 21:55:49 【问题描述】:

.NET 中是否有提供类似 WinDBG-SOS 功能的 API?

给定一个对象,我想知道有多少根在运行时通过 C# 在同一进程中保持其活动状态。

【问题讨论】:

我不确定在运行时级别上是否可行。优化后的代码可以跳过堆栈直接进入 CPU。所以我想知道你希望从这个 API 得到什么输出? 无 API。您需要一个内存分析器,其中有几个。您最喜欢的网络搜索引擎可以为您提供帮助。 @Sergey.quixoticaxis.Ivanov 基本上你可以用 WinDBG 实现什么;找到内存中的对象及其根。 @Uno 我想指出这样一个事实,即恕我直言,如果将其添加到运行时 API,那就太奇怪了,因为它是一个仅针对调试构建提供合理信息的 API。 【参考方案1】:

ClrMD

NuGet:https://www.nuget.org/packages/Microsoft.Diagnostics.Runtime

我还写了一个小例子:

https://github.com/UnoSD/ClrMdExample

【讨论】:

【参考方案2】:

是的,有。如果没有,所有这些配置文件将如何工作?这称为 Profiling API:https://msdn.microsoft.com/en-us/library/ms404386(v=vs.110).aspx。

API 本身是非托管的(COM 对象)。但是没有什么可以阻止您通过 RCW 从托管代码中使用它。

我不确定您是否可以从内部剖析流程。我认为探查器必须在另一个进程中。虽然我认为进程处理通信并通过命名管道等通信方法将数据反馈回分析进程没有问题。

【讨论】:

谢谢,我稍后看看文档;你也有一些例子的链接吗? 抱歉,我可能错了能够编写托管分析器 :( ***.com/questions/5736845/… 你可以在那篇文章中找到有趣的博客参考 深入挖掘我发现了更多有趣的东西:topholt.com/c-clr-profilerresearch.microsoft.com/en-us/um/redmond/projects/pex/wiki/… 这看起来是您任务的一个很好的起点:***.com/questions/3898078/…

C#中垃圾收集的根是啥[重复]

...的内部结构并试图理解根实际指的是什么?它从哪里开始寻找根源?是从当前线程执行还是从堆中取出对象并递归查看引用?【问题讨论】:root是一个用户级别,可以访问设备上的所有内容。@SethMcC 查看详情

垃圾收集器 .Net 将收集 Stack() [关闭]

】垃圾收集器.Net将收集Stack()[关闭]【英文标题】:DoStack()willbecollectbygarbagecollector.Net[closed]【发布时间】:2016-11-1822:43:13【问题描述】:在myFunction()中,我定义了一个堆栈,如:StackmyStack=newStack()。如果myFunction()在服务器上运行... 查看详情

jvm垃圾收集算法(标记-清除复制标记-整理)

 【JVM垃圾收集算法】1)标记-清除算法:  标记阶段:先通过根节点,标记所有从根节点开始的对象,未被标记的为垃圾对象(错了吧?)  清除阶段:清除所有未被标记的对象2)复制算法:  将原有的内存空间分为... 查看详情

jvm垃圾收集算法

标记-清除标记-清除算法是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记... 查看详情

什么是类的 GC 根?

...时间】:2015-01-2700:04:43【问题描述】:在Java中,有称为垃圾收集根(GC根)的特殊对象。它们作为垃圾收集标记机制的根对象(见图)。Thisarticle描述了四种类型的GC根:局部变量活动线程静态变量JNI参考还提到:类本身可以被... 查看详情

不说吴亦凡,谈谈垃圾收集器(代码片段)

目录概念基本知识Mark-Sweep垃圾收集器1.标记阶段伪代码:2.清除阶段伪代码概念 垃圾收集器是一种动态内存分配器,它自动释放程序不再需要的已分配块。这些块被称为垃圾。自动回收堆存储的过程叫做垃圾收集。基本... 查看详情

不说吴亦凡,谈谈垃圾收集器(代码片段)

目录概念基本知识Mark-Sweep垃圾收集器1.标记阶段伪代码:2.清除阶段伪代码概念 垃圾收集器是一种动态内存分配器,它自动释放程序不再需要的已分配块。这些块被称为垃圾。自动回收堆存储的过程叫做垃圾收集。基本... 查看详情

垃圾收集似乎关闭了本地执行程序并导致 RejectedExecutionException

】垃圾收集似乎关闭了本地执行程序并导致RejectedExecutionException【英文标题】:GarbagecollectionseemstoshutdownlocalexecutorandcauseRejectedExecutionException【发布时间】:2018-03-0912:29:26【问题描述】:在间歇性头痛方面需要帮助。代码调用com.go... 查看详情

jvm垃圾回收2(垃圾收集算法)

...圾算法、垃圾收集算法、垃圾收集器)  前面说了如何寻找jvm垃圾,有两种方法:引用计数法/可达性算法。这篇准备讲,标记完垃圾之后,回收的算法,这里的算法只是垃圾回收的思想。后面会讲到多种垃圾收集器,这里的... 查看详情

垃圾收集器与内存分配策略

...数算法可达性分析算法再谈引用生存还是死亡回收方法区垃圾收集算法标记-清除算法复制算法标记-整理算法分代收集算法HotSpot的算法实现枚举根节点安全点安全区域垃圾收集器Serial收集器ParNew收集器ParallelScavenge收集器SerialOld... 查看详情

EntityFrameworkCore 记录警告“尝试关闭已被垃圾收集的跨度。查询编译器`

】EntityFrameworkCore记录警告“尝试关闭已被垃圾收集的跨度。查询编译器`【英文标题】:EntityFrameworkCorelogswarnings`Tryingtocloseaspanthatwasalreadygarbagecollected.QueryCompiler`【发布时间】:2022-01-0313:22:42【问题描述】:我有典型的.net5/6Web应... 查看详情

jvm垃圾回收算法与垃圾收集器(代码片段)

垃圾回收算法与垃圾收集器1.垃圾收集算法1.1标记清除算法1.1.1基本概念1.1.1.1`mutator`和`collector`1.1.1.2`mutatorroots`(`mutator`根对象)1.1.1.3可达对象1.1.2垃圾回收过程1.1.2.1标记(mark)1.1.2.2清除(sweep)1.1.2.3整体流程1.1 查看详情

g1垃圾收集器

概念先知什么是垃圾回收简单的说垃圾回收就是回收内存中不再使用的对象。垃圾回收的基本步骤: 查找内存中不再使用的对象释放这些对象占用的内存查找内存中不再使用的对象如何判断哪些对象不再被使用呢?有2个方... 查看详情

垃圾收集算法一览

根搜索收集器跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到GC Roots没有任何引用链时,则证明... 查看详情

3.常用的垃圾收集算法

3.1标记-清除算法(Mark-Sweep)  标记-清除算法从根集合(GCROOTS)进行扫描,对存活的对象进行标记,标记完毕后,再扫描整个空间中未被标记的对象,进行回收。标记清除算法不需要进行对象的移动,只需对不存活的对象进... 查看详情

clr垃圾收集器

...中可达对象压缩,使占用连续的内存; GC是基于代的垃圾回收算法,对象越新,生存期越短,对象越老,生存期越长,回收堆的一部分,速度快于回收整个堆。1、初始化的对象都是0代对象,当0代对象 查看详情

垃圾收集与内存分配

1.判断对象存活状态1.引用计数算法(在对象中添加一个计数器):难以解决循环引用的问题;2.可达性分析算法:通过一系列“GCRoots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜... 查看详情

Node.js (v8) 垃圾收集器如何工作?

...述】:我已经对我的node.js应用程序进行了一些测试,以寻找我的代码应该做的内存泄漏。我运行的脚本在我看来应该会泄漏内存,但我对结果感到惊讶。redisClient.on(\'message\',initRequest);function 查看详情