ygc 的过程中有没有对 无用对象 进行回收?
在《深入理解 jvm 》中看到的年轻代 gc 都是在标记-复制和标记-整理,而标记-清除都是在老年代 gc 完成的。所以目前得到的结论是只有 fullgc 的时候才会对对象内存进行回收。
不知道这个结论是不是正确,如果错误请大佬指点一二。如果是对的,那不在 ygc 的时候进行回收而是一代一代的复制在回收呢。再次请大佬们指点
1
Takamine 2020-04-26 21:26:55 +08:00
年轻代也会进行回收,你说的标记复制指的是把存活对象复制到另外一片区域后对之前的整块区域清除,这样可以减少内存碎片。标记整理(压缩),是另外一种在清除之后再整理的处理方式。
年轻代会频繁发生 GC,进行清掉 Eden 区并把存活对象赶到 Survivor 区( 0,1 对调)的操作。 在 G1 开始之后分代假设的堆内存分配不是连续的而是分为不同的 region,有一点点变化。 |
2
Takamine 2020-04-26 21:31:23 +08:00 1
|
4
zifangsky 2020-04-26 21:56:38 +08:00
young GC 也有对垃圾对象回收。另外,给你再推荐一本学习 JVM 的好书——《实战 Java 虚拟机》,这本书的示例和图表很多,很容易理解。
|
5
iffi 2020-04-26 22:08:20 +08:00
我在官网只看到过 minor GC 、major GC 、Full GC
|
7
AAASUKA 2020-04-27 08:24:55 +08:00
标记-复制和标记-整理其实也有清除,叫做标记-清除-复制,标记-清除-整理你就明白了
|