问题标签 [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.
java - GC 源于 IBM java heapdump - 列表是否完整?
我正在分析 IBM JVM 使用 Eclipse MAT 编写的 .phd 转储。
名为“gc_roots”的视图显示以下列表:
我可以确定 GC 根列表是完整的吗?
这是否意味着正在运行的线程堆栈中的所有局部变量都包含在“未知”部分中?
为什么它被命名为这样的BTW?
我对 GC 根列表完整性的怀疑是基于这样一个事实,即在抛出 OOM 时堆包含几个相当大的弱引用 char 缓冲区。这看起来违反了合同,因为即使是 SoftReferences 也必须在 OOM 之前清除。
更新
没有“未知”部分,而是出现了“JNI Global”。而且我仍然想知道堆栈中的局部变量在哪里。
java - JProfiler Heap Walker - 选择由位于特定 Java 包中的 GC Root 持有的对象
我有 JavaFX 应用程序,并且使用 JProfiler 10.1.5 制作了堆快照。我当前的对象集(使用“使用新”选择步骤过滤)在 672 个类中有 46064 个对象。我想缩小内存泄漏的搜索范围,并将我当前的对象集过滤为仅包含位于特定 java 包中的 GC Roots 持有的对象。可能吗?有没有其他工具可以进行这样的搜索?
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 上的第一篇文章。
memory - 垃圾收集器 (GC) 根是如何存储的?
我知道如何找到根,但问题是,(AFAIK)必须在运行时找到它们。为此,您需要一个可能溢出的固定大小的容器或一个可调整大小的容器。我不想使用固定大小的容器,因为很难判断要保留多少空间(而且可能很浪费)。可调整大小的容器似乎最好,但问题是,GC 在没有足够空间时运行,因此可调整大小的容器将无法存储它需要的内容。那么有了这些条件,GC 根是如何存储的呢?