美文网首页
Java对象历险记 [动图]

Java对象历险记 [动图]

作者: Arthinking | 来源:发表于2020-02-15 15:36 被阅读0次

无论你是跟同事、同学、上下级、同行、或者面试官讨论技术问题的时候,很容易卷入JVM大型撕逼现场。为了能够让大家从大型撕逼现场中脱颖而出,最近我苦思冥想如何把知识点尽可能呈现的容易理解,方便记忆。于是就开启了这一系列文章的编写。为了让JVM相关知识点能够形成一个体系,arthinking将编写整理一系列的专题,以尽量以图片的方式描述相关知识点,并且最终把所有相关知识点串成了一张图。持续更新中,欢迎大家阅读。有任何错落之处也请您高抬贵手帮忙指正,感谢!

对象的分配和回收流程

image

如上图动画所示:

1、优先在Eden区分配对象

  • Eden区空间不足,触发Minor GC,标记可回收对象,然后Eden区存活对象拷贝到往Survivor-From区,接下来清空Eden区;
  • 再次触发Minor GC,扫描Eden区和from区,把存活的对象复制到To区,清空Eden区和from区;
  • 如果在Minor GC复制存活对象到Survivor区时,发现Survivor区内存不够,则提前把对象放入老年代;

2、大对象直接进入老年代

如果发现需要大量连续内存空间的Java对象,如很长的字符串或者数组,则直接把对象放入老年代。

可通过-XX:PretenureSizeThreshold参数设置大对象的最小大小,该参数只对Serial和ParNew两款收集器有效。

  • 因为新生代采用复制算法收集垃圾,大对象直接进入老年代,避免在Eden区和Survivor区发生大量内存复制;
  • 写程序的时候尽量避免大对象。

3、长期存活对象进入老年代

固定对象年龄判断:默认的,存活对象在Survivor的From和To区来回交换15次后,如果对象最终还是存活,就放入老年代。可以通过-XX:MaxTenuringThreshold参数来设置对象的年龄。

动态对象年龄判断:如果发现Survivor中有相同年龄的对象空间总和大于Survivor空间的一半,那么年龄大于或者等于该年龄的对象直接晋升到老年代。

4、空间分配担保

为什么需要分配担保:如果Survivor区存活了很多对象,空间不够了,都需要晋升到老年代,那么久需要老年代进行分配担保,也就是将Survivor无法容纳的对象直接进入老年代。

  • 发生Minor GC前,JVM先检查老年代最大可用连续空间是否大于新生代所有对象的总空间
    • 大于:空间足够,直接Minor GC;
    • 小于:进行一次Full GC。

JDK 6 Update 24前会根据HandlePromotionFailure参数判断是否允许担保失败,如果允许,则尝试一次Minor GC;否则,则进行Full GC。


本文为arthinking基于相关技术资料和官方文档撰写而成,确保内容的准确性,如果你发现了有何错漏之处,烦请高抬贵手帮忙指正,万分感激。

大家可以关注我的博客:itzhai.com 获取更多文章,我将持续更新后端相关技术,涉及JVM、Java基础、架构设计、网络编程、数据结构、数据库、算法、并发编程、分布式系统等相关内容。

如果您觉得读完本文有所收获的话,可以关注我的账号,或者点赞啥的。关注我的公众号,及时获取最新的文章。


本文作者: arthinking

博客链接: https://www.itzhai.com/jvm/java-object-adventure.html

Java对象历险记 | 分配担保,空间分配

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。


image

相关文章

  • Java对象历险记 [动图]

    无论你是跟同事、同学、上下级、同行、或者面试官讨论技术问题的时候,很容易卷入JVM大型撕逼现场。为了能够让大家从大...

  • ImageUtil

    功能列表 将 opencv 中的 Mat 对象转为 Java 中的 BufferedImage 对象; 预览指定图...

  • Java的类

    1、Java的成员变量和成员方法 }2、类的使用 3、一个对象调用的内存图 4、两个对象调用的内存图 5、对象产生...

  • 达康书记的朋友圈

    附达康书记“表情包”: 动图 动图 动图 动图 动图

  • 反射

    java的动态机制,用于在运行期间检查对象的类型,检查对象的类结构,属性,方法,还可以动态加载类,动态创建对象,动...

  • Java_android 知识点图

    不定期更新Java和Android中知识点图 面向对象 包装类 final修饰符知识点 Java集合框架 Java...

  • 仿斗鱼聊天:基于CoreText的面向对象图文排版工具AWRic

    AWRichText 基于CoreText,面向对象,极简,易用,高效,支持精确点击,UIView混排,GIF动图...

  • 2018-07-16

    java基础总结: 1.计算机布罗图: 2.开发语言分类: 高级语言(java(特点:跨平台,面向对象,垃圾回收...

  • JAVA 多线程与高并发学习笔记(六)——内置锁

    Java对象结构 Java 内置锁很多信息都放在对象结构中,这里先了解一下 Java 对象结构。 Java 对象(...

  • Java思维理清思路

    Java思维导图 学习方法: 针对性学习 引导式学习 对比式学习 总结式学习 Java简介: 简单性,面向对象,分...

网友评论

      本文标题:Java对象历险记 [动图]

      本文链接:https://www.haomeiwen.com/subject/ejfyfhtx.html