CMS 垃圾收集器垃圾收集大概分为 4 个阶段:
( 1 )初始标记
( 2 )并发标记预清除
( 3 )重新标记
( 4 )并发清除
在 ( 2 )并发标记预清除阶段,因为还有用户线程在进行,可能会有对象引用的更改, 所以需要( 3 )重新标记 重新修正存活对象
那么在( 4 )并发清除阶段(也是有用户线程在进行), 清除的时候,如果用户线程更改了对象的引用,导致原先一个应该不算存活的对象存活了 那么清除又将该对象清除了怎么办?
网上看了很多答案,没有说的很清楚,都是扯到了浮动垃圾上,浮动垃圾应该算是新产生的对象吧,也不会被清除,就是因为不被清除,才可能导致新的 GC
也看了《深入理解 Java 虚拟机》也没有一个很好的解释。
希望理解的朋友可以解答下
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.