java 方法区怎么进行回收
java中有full gc 和 minor gc。
full gc是回收所有,minor gc是回收新生代。
java提供了多种垃圾收集器,不同版本的jdk默认的垃圾收集器也不同。
jdk8默认是parallel scavange gc用于新生代的回收,对应的parallel old gc用于老年代的回收。
我的问题是:
- 这两个垃圾回收器都有明确的回收范围,那方法区是怎么回收的呢?
- 如果说要触发一次full gc,那在jdk8下进行的操作是parallel scavange gc回收一次 + parallel old gc回收一次吗?
- 其他的垃圾回收器有哪些可以回收方法区呢?
求大佬指点!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
规范里没说,所以要看 JVM 怎么实现;即便是同一个 JVM,不同 JDK 版本下表现也不太一样。
以 HotSpot 为例,JDK1.6 的方法区在永久代里,FullGC;JDK1.8 在 Metaspace 里,还是 FullGC。
我看《深入理解Java虚拟机》里面介绍“回收方法区”时说Java虚拟机规范中可以不要求虚拟机在方法区实现垃圾收集。方法区垃圾收集主要回收两部分内容:废弃常量和无用的类。
方法区是否对类进行回收,HotSpot虚拟机提供了
-Xnoclassgc
参数进行控制,但是书中没有说明使用了那个垃圾收集器。