java 方法区怎么进行回收

java中有full gc 和 minor gc。
full gc是回收所有,minor gc是回收新生代。

java提供了多种垃圾收集器,不同版本的jdk默认的垃圾收集器也不同。
jdk8默认是parallel scavange gc用于新生代的回收,对应的parallel old gc用于老年代的回收。

我的问题是:

  1. 这两个垃圾回收器都有明确的回收范围,那方法区是怎么回收的呢?
  2. 如果说要触发一次full gc,那在jdk8下进行的操作是parallel scavange gc回收一次 + parallel old gc回收一次吗?
  3. 其他的垃圾回收器有哪些可以回收方法区呢?

求大佬指点!

阅读 3.3k
2 个回答

规范里没说,所以要看 JVM 怎么实现;即便是同一个 JVM,不同 JDK 版本下表现也不太一样。

以 HotSpot 为例,JDK1.6 的方法区在永久代里,FullGC;JDK1.8 在 Metaspace 里,还是 FullGC。

https://www.zhihu.com/questio...

我看《深入理解Java虚拟机》里面介绍“回收方法区”时说Java虚拟机规范中可以不要求虚拟机在方法区实现垃圾收集。方法区垃圾收集主要回收两部分内容:废弃常量无用的类
方法区是否对类进行回收,HotSpot虚拟机提供了-Xnoclassgc参数进行控制,但是书中没有说明使用了那个垃圾收集器。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题