关于 jvm 的一个问题,求解

2020-04-26 21:16:27 +08:00
 xuwei0056

ygc 的过程中有没有对 无用对象 进行回收?
   在《深入理解 jvm 》中看到的年轻代 gc 都是在标记-复制和标记-整理,而标记-清除都是在老年代 gc 完成的。所以目前得到的结论是只有 fullgc 的时候才会对对象内存进行回收。
   不知道这个结论是不是正确,如果错误请大佬指点一二。如果是对的,那不在 ygc 的时候进行回收而是一代一代的复制在回收呢。再次请大佬们指点

2376 次点击
所在节点    Java
7 条回复
Takamine
2020-04-26 21:26:55 +08:00
年轻代也会进行回收,你说的标记复制指的是把存活对象复制到另外一片区域后对之前的整块区域清除,这样可以减少内存碎片。标记整理(压缩),是另外一种在清除之后再整理的处理方式。
年轻代会频繁发生 GC,进行清掉 Eden 区并把存活对象赶到 Survivor 区( 0,1 对调)的操作。
在 G1 开始之后分代假设的堆内存分配不是连续的而是分为不同的 region,有一点点变化。
Takamine
2020-04-26 21:31:23 +08:00
xuwei0056
2020-04-26 21:37:07 +08:00
@Takamine 感谢大佬回复
zifangsky
2020-04-26 21:56:38 +08:00
young GC 也有对垃圾对象回收。另外,给你再推荐一本学习 JVM 的好书——《实战 Java 虚拟机》,这本书的示例和图表很多,很容易理解。
iffi
2020-04-26 22:08:20 +08:00
我在官网只看到过 minor GC 、major GC 、Full GC
xuwei0056
2020-04-26 22:26:01 +08:00
@iffi 就是 minor gc,哈哈
AAASUKA
2020-04-27 08:24:55 +08:00
标记-复制和标记-整理其实也有清除,叫做标记-清除-复制,标记-清除-整理你就明白了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666394

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX