关注
方法区会发生GC,以下内容摘自深入理解Java虚拟机。
些人认为方法区(如HotSpot虚拟机中的元空间或者永久代)是没有垃圾收集行为的,《Java虚拟机规范》中提到过可以不要求虚拟机在方法区中实现垃圾收集,事实上也确实有未实现或未能完整实现方法区类型卸载的收集器存在(如JDK 11时期的ZGC收集器就不支持类卸载),方法区垃圾收集的“性价比”通常也是比较低的:在Java堆中,尤其是在新生代中,对常规应用进行一次垃圾收集通常可以回收70%至99%的内存空间,相比之下,方法区回收囿于苛刻的判定条件,其区域垃圾收集的回
收成果往往远低于此。
方法区的垃圾收集主要回收两部分内容:废弃的常量和不再使用的类型。回收废弃常量与回收Java堆中的对象非常类似。举个常量池中字面量回收的例子,假如一个字符串“java”曾经进入常量池中,但是当前系统又没有任何一个字符串对象的值是“java”,换句话说,已经没有任何字符串对象引用常量池中的“java”常量,且虚拟机中也没有其他地方引用这个字面量。如果在这时发生内存回收,而且垃圾收集器判断确有必要的话,这个“java”常量就将会被系统清理出常量池。常量池中其他类(接
口)、方法、字段的符号引用也与此类似。
判定一个常量是否“废弃”还是相对简单,而要判定一个类型是否属于“不再被使用的类”的条件就比较苛刻了。需要同时满足下面三个条件:
·该类所有的实例都已经被回收,也就是Java堆中不存在该类及其任何派生子类的实例。
·加载该类的类加载器已经被回收,这个条件除非是经过精心设计的可替换类加载器的场景,如OSGi、JSP的重加载等,否则通常是很难达成的。
·该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。
Java虚拟机被允许对满足上述三个条件的无用类进行回收,这里说的仅仅是“被允许”,而并不是和对象一样,没有引用了就必然会回收。
查看原帖
点赞 评论
相关推荐
11-08 22:19
浙江科技大学 运营 点赞 评论 收藏
分享
mio6899:咱好像是同一个项目,LLM那个
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 27届学院二本,袋鼠云->快手->腾讯wxg,25年末聊聊我的前端之路1.4W
- 2... 本科五段大厂实习,秋招五个offer,我的校招结束了7703
- 3... 适可而止吧!你就是“烂泥”5893
- 4... 大四双非水产专业上岸阿里后端(五)5696
- 5... 我的世界观,就是对抗优绩主义的武器3884
- 6... 27双非杀入字节!2756
- 7... 26届双非硕Java秋招总结1675
- 8... 日常实习-小红书后端java二面1620
- 9... 实习被“放养”零产出,该及时止损还是继续苟着?1539
- 10... 学院本的秋招漫漫路,谷底之后只剩坦途1499
正在热议
更多
# 实习没人带,苟住还是跑路? #
2162次浏览 67人参与
# 工作中的卑微时刻 #
29866次浏览 190人参与
# 元旦假期你打算怎么过 #
2836次浏览 85人参与
# 过年期间可能会经历的尴尬瞬间 #
48537次浏览 313人参与
# 我们是不是被“优绩主义”绑架了? #
4441次浏览 175人参与
# 从夯到拉,评价编程语言 #
27849次浏览 148人参与
# 如何看待应届生身份? #
210784次浏览 2234人参与
# 查收我的offer竞争力报告 #
263831次浏览 1644人参与
# 多益网络工作体验 #
60226次浏览 300人参与
# 牛客2025仙途报告 #
21584次浏览 325人参与
# 机械制造面试记录 #
299905次浏览 3143人参与
# 实习心态崩了 #
96593次浏览 494人参与
# 华为工作体验 #
277251次浏览 1355人参与
# 26届秋招投递记录 #
109354次浏览 653人参与
# 实习打杂,要跑路吗 #
54340次浏览 330人参与
# 你有哪些缓解焦虑的方法? #
44793次浏览 873人参与
# 找工作,行业重要还是岗位重要? #
88323次浏览 1769人参与
# 华为池子有多大 #
154605次浏览 867人参与
# 今年你最想重开的一场面试是? #
18248次浏览 175人参与
# 参加过提前批的机械人,你们还参加秋招么 #
105355次浏览 1647人参与
SHEIN希音公司福利 283人发布
