java GC

jdk1.8环境下,有不对的地方望指正

先上图

javaGC.jpg

java GC

给每个对象分为两个阶段(新生代,老年代)
新生代分为 Eden 和 Survivor 区
Survivor 又分为 From 和 To 区
新生代占 1/3 堆空间,老年代占 2/3 堆空间

对象回收过程

对象被创建,进入 Eden 区。当 Eden 区不足以分配空间时,会发起 Minor GC(第一次GC),把还存活的对象复制到 Survivor 区,并清空 Eden 区。(大对象将直接进入老年代 Old )

假设 对象被复制到 Survivor 区的 From 区(如果From区空间不够,直接进入老年代)。第一次 GC 时,会清空 Eden 区和 To 区,把存活对象复制到 From区

每一次 Minor GC,From 和 To 区的职责互换,这时 Eden 和 From 区中的存活对象会复制到 To 区,如此反复
jvm 给每一个对象都定义了 对象年(Age)计数器,每一次 Minor GC 都会 Age + 1 ,当 Age = 15 时,转移到老年代。
动态对象年龄,如果 Survivor 空间中,相同年龄所有对象的总和大于 From/To 区空间,年龄大于等于该年龄的对象就可以直接进入老年代

经历过 16 次 Minor GC 的对象、大对象、动态年龄对象会一直在老年代里累计,空间不够时,将发起 Major GC,清理时将触发 STW(stop the world)。

Minor GC 复制清理算法
Major GC 标记整理算法

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、垃圾收集的意义  相对于C++来说,Java预言显著的特点就是引入了垃圾回收机制,它使得Java程序员在编写程...
    SunnyMore阅读 2,192评论 0 50
  • 以前写c/c++的时候虽然也有shared_ptr这样的自动内存管理机制,但是它内部其实是通过引用计数的原理进行内...
    嘉伟咯阅读 681评论 0 1
  • 参考网址:http://www.blogjava.net/ldwblog/archive/2013/07/24/4...
    felix_feng阅读 791评论 0 2
  • 本文聊聊Java 虚拟机的一些概念,常见GC算法底层过程,图解,并跟踪日志做分析。篇幅有点长,不要抱着一次看完的心...
    siriusing阅读 760评论 0 6
  • 今天我们来谈谈Java主流虚拟机-HotSpot的GC实现机制,本篇文章默认使用HotSpot虚拟机进行介绍,如果...
    那年的歌阅读 422评论 0 0