问题标签 [gc-roots]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
208 浏览

java - GC 源于 IBM java heapdump - 列表是否完整?

我正在分析 IBM JVM 使用 Eclipse MAT 编写的 .phd 转储。

名为“gc_roots”的视图显示以下列表:

在此处输入图像描述

我可以确定 GC 根列表是完整的吗?
这是否意味着正在运行的线程堆栈中的所有局部变量都包含在“未知”部分中?

为什么它被命名为这样的BTW?

我对 GC 根列表完整性的怀疑是基于这样一个事实,即在抛出 OOM 时堆包含几个相当大的弱引用 char 缓冲区。这看起来违反了合同,因为即使是 SoftReferences 也必须在 OOM 之前清除。

更新

这是同时编写的核心转储中的 GC 根列表,这让我更不清楚。 在此处输入图像描述

没有“未知”部分,而是出现了“JNI Global”。而且我仍然想知道堆栈中的局部变量在哪里。

0 投票
1 回答
178 浏览

java - JProfiler Heap Walker - 选择由位于特定 Java 包中的 GC Root 持有的对象

我有 JavaFX 应用程序,并且使用 JProfiler 10.1.5 制作了堆快照。我当前的对象集(使用“使用新”选择步骤过滤)在 672 个类中有 46064 个对象。我想缩小内存泄漏的搜索范围,并将我当前的对象集过滤为仅包含位于特定 java 包中的 GC Roots 持有的对象。可能吗?有没有其他工具可以进行这样的搜索?

0 投票
0 回答
32 浏览

java - Zookeeper:为什么 ClientCnxn 的实例是 MAT 中的 GC 根?

我正在使用 Eclipse MAT 研究堆转储,但无法理解为什么 zookeeper ClientCnxn 实例在那里被标记为 GC 根。

在此处输入图像描述

此类由 Websphere AS 下的应用程序类加载器加载。我看到很多这样的实例(数百个),每个都被标记为 GC root。

知道为什么这些可能是 GC 根吗?这些不是线程,不是堆栈变量等。

有什么方法可以从 MAT 获取有关这一点的一些信息?

0 投票
1 回答
265 浏览

java - 什么是引用 Java 外部类和内部类的 GC 根对象?

因此,我对 android 中的内存泄漏进行了大量研究,并阅读了许多 StackOverflow 帖子。我仍然不明白的是,根据 Medium 和 StackOverflow 帖子(下面提到的链接),如果我将活动的上下文传递给 Recyclerview 的适配器并将其作为全局变量存储在适配器中,我的活动与适配器是仍然有资格进行垃圾收集。这是因为没有 GC 根引用适配器或我的活动(一旦它被销毁),因此两者都将被垃圾收集(Example1). 但是,为什么内部类不适用相同的情况?我知道他们持有对其持有类的隐式引用,但是如果活动(在这种情况下为持有类)被破坏并且即使内部类仍在执行一些异步任务,不应该没有指向任何GC 根他们?(控股或内部阶级)所以他们都应该得到垃圾收集?(例 2)

示例 1:(在活动被破坏后有资格获得 GC):

示例 2:(活动被销毁后不符合 GC 条件):

我提到的两个帖子的链接如下: https ://medium.com/@oznusem/circular-dependency-in-android-should-i-worry-about-it-814660ac79ec

在 RecyclerView.Adapter 中保留 Context/Activity 实例是否安全?

对不起,如果我没有把我的问题说清楚,这是我在 StackOverflow 上的第一篇文章。

0 投票
1 回答
197 浏览

memory - 垃圾收集器 (GC) 根是如何存储的?

我知道如何找到根,但问题是,(AFAIK)必须在运行时找到它们。为此,您需要一个可能溢出的固定大小的容器或一个可调整大小的容器。我不想使用固定大小的容器,因为很难判断要保留多少空间(而且可能很浪费)。可调整大小的容器似乎最好,但问题是,GC 在没有足够空间时运行,因此可调整大小的容器将无法存储它需要的内容。那么有了这些条件,GC 根是如何存储的呢?