我正在分析 IBM JVM 使用 Eclipse MAT 编写的 .phd 转储。
名为“gc_roots”的视图显示以下列表:
我可以确定 GC 根列表是完整的吗?
这是否意味着正在运行的线程堆栈中的所有局部变量都包含在“未知”部分中?
为什么它被命名为这样的BTW?
我对 GC 根列表完整性的怀疑是基于这样一个事实,即在抛出 OOM 时堆包含几个相当大的弱引用 char 缓冲区。这看起来违反了合同,因为即使是 SoftReferences 也必须在 OOM 之前清除。
更新
没有“未知”部分,而是出现了“JNI Global”。而且我仍然想知道堆栈中的局部变量在哪里。