gst*_*low 6 java garbage-collection dispose java-8
总是我认为垃圾收集器只清除堆,现在我想是的.
在java 8中,permGen被删除,它被Metaspace取代.
正如我所知,Metaspace是垃圾收集(/sf/answers/1685275231/)
谁从Metaspace收集垃圾?
我认为您的困惑源自俗语“垃圾收集”,该词已被广泛使用,但并未真正描述托管环境中发生的情况。
内存管理是一个复杂的过程,简化后,涉及:
因此,对于不是由Java对象组成的内存空间,前两点通常没有多大意义,这正是您的问题所在。解决前两点的算法通常只处理Java堆(定义为包含普通Java对象实例和类似结构化数据的空间)。
您链接的声明说“元空间已被GCed”似乎主要解决了第三点。这是因为如果不再需要元空间中的内存,则可能会对其进行回收。这并不意味着它需要遍历元空间或类似空间中的实时引用。显然,类元数据在与它们关联时变得过时Class且ClassLoader变得不可访问,它们都是生活在Java堆上的普通(很好,几乎)对象。
因此,当Metaspace的大小达到极限时,将触发垃圾回收,但是对于上面的前两个项目符号,它将不会处理Metaspace,因为不是Metaspace可以告诉您a是否Class已变得未使用。这将是一个普通的垃圾收集,但它将是“完整GC”或当前使用的GC算法所具有的术语,该模式包括在包含类和类加载器的内存段(也称为“生成”)中收集垃圾。
一旦Class和ClassLoader堆实例都被收集,其相关联的元空间数据可以回收以及在清理期间。
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |