当前位置: 首页 > 面试题库 >

在Java中是否收集了永久代空间垃圾?

宋弘壮
2023-03-14
问题内容

我已经读过,Perm gen(或Permanent
Generation)空间不是垃圾收集的。但是,在CMS集合中,我可以在GC日志中看到一些正在卸载的类。那么,在完全收集或CMS收集期间是否会收集烫发垃圾?


问题答案:

PermGen像堆的其他部分一样被垃圾收集。

这里要注意的是PermGen包含类和对象的元数据,即指向分配对象的堆其余部分的指针。PermGen还包含类加载器,在使用结束时必须手动销毁它们,否则它们将保留在内存中,并且还会在堆上保留对其对象的引用。Jon
Masamitsu在Sun / Oracle博客网站上发表的“ Presenting the Permanent
Generation”
文章可能会为您提供帮助。



 类似资料:
  • 问题内容: 我知道当分配DirectbyteBuffer时,它不受垃圾回收的限制,但是我想知道的是 包装 对象是否被垃圾回收了。 例如,如果我分配了一个新的DirectByteBuffer dbb,然后使用dbb.duplicate()将其复制(浅复制),则我将在同一块内存中使用两个包装器。 这些包装器是否要进行垃圾收集?如果我做了 我最终会自己OOM吗? 问题答案: 在Sun JDK中,由创建的

  • 问题内容: 该问题已发布在某个网站上。我在这里找不到正确的答案,因此我将其再次发布在这里。 我的查询与停止线程无关。让我改一下我的问题。A行(请参见上面的代码)启动一个新线程;和B行使线程引用为空。因此,JVM现在具有一个线程对象(处于运行状态),该对象不存在引用(如B行中的t = null)。所以我的问题是,为什么这个线程(在主线程中不再有引用)一直保持运行状态,直到主线程运行。根据我的理解,线

  • 问题:那么扫一扫实际上是什么意思?它是实际的垃圾回收(回收无法访问的对象并释放内存?)?还是意味着什么不同? 如果是这样,如果我们省略了扫描阶段,我们会遇到什么样的麻烦?

  • 问题内容: 与同事进行了讨论。当诸如c#或java垃圾之类的语言收集诸如字符串之类的对象并将其返回到堆时,它们是否也清除了该内存块,例如用0或1覆盖? 我的假设是,除非按原样返回该块,除非使用诸如带有带有finalize重载的securestring之类的类将该块清零。 问题答案: 实际上,不,这不会发生。覆盖刚刚释放的内存需要花费时间,因此会有性能损失。“安全”之类的物体SecureString

  • 问题内容: 我对Java中的垃圾回收如何工作感到有些困惑。 我得到一个对象,当它不再有实时引用时,就可以进行垃圾回收,但是如果它引用了实时对象又该怎么办? 可以说我有一个节点集合,再次引用了更多节点 现在,如果我删除列表,则应该对节点cd和e进行垃圾回收。节点e没有更多引用,而节点c和d具有循环引用。 但是节点a呢?会被垃圾收集吗? 节点b是否具有外部实时引用会有所不同吗?假设节点b从另一个地方引

  • 我已经读到,在以下情况下,对象可以进行垃圾收集。 该对象的所有引用都显式设置为null 但是,是否有无论如何要标识的对象是合格的垃圾回收机制是由垃圾收集器收集?