专栏首页JavaQ【每天一道面试题】JVM内存分配规则有哪些?

【每天一道面试题】JVM内存分配规则有哪些?

1.对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC。

2.需要大量连续内存空间的对象直接进入老年代,这样做的目的是避免在Eden区和两个Survivor区(From space区和To Space区)之间发生大量的内存拷贝。

3.长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,直到达到阀值对象进入老年区。

4.动态判断对象的年龄。如果Survivor区中相同年龄的所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象可以直接进入老年代。

5.空间分配担保。每次进行Minor GC时,JVM会计算Survivor区移至老年区的对象的平均大小,如果这个值大于老年区的剩余值大小则进行一次Full GC,如果小于则检查HandlePromotionFailure设置,如果true则只进行Monitor GC,如果false则进行Full GC。

本文分享自微信公众号 - JavaQ(Java-Q),作者:wind瑞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 支撑海量数据的数据库架构如何设计?

    作为一个全球人数最多的国家,一个再怎么凄惨的行业,都能找出很多的人为之付出。而在这个互联网的时代,IT公司绝对比牛毛还多很多。但是大多数都是创业...

    JavaQ
  • 就写了一行代码,被问了这么多问题

    小白:(是不是太基础了,暗笑)byte[] arrays = new byte[1024]。

    JavaQ
  • 聊一聊Redis官方置顶推荐的Java客户端Redisson

    写这篇的时候,相信有很多朋友还在用Jedis作为Redis的客户端,我不禁有很多问号,Jedis还香吗?如果你早些年说它香我信,但是都2020年了,它真的不那么...

    JavaQ
  • JVM-6.内存分配和回收策略

    JDK6之后,只要老年代的连续空间大于新生代的总对象或者历次晋升的平均大小就会进行Minor GC,否则进行Full GC

    悠扬前奏
  • Java虚拟机:JVM内存分代策略

    Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代、老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存分代策略。

    业余草
  • R语言学习笔记——柱形图

    今天分享R语言中的柱形图,所有图表语法都基于ggplot2包中的ggplot函数完成 。 其实R语言本身就带有各种作图函数,比如plot、bar、pie等,而且...

    数据小磨坊
  • Java堆

    Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。这个区域是用来存放对象实例的,几乎所有对象实例都会在这里分配内存。平常我们听说的垃圾收集、GC等...

    Java学习录
  • python也能玩视频剪辑!moviepy操作记录总结

    前几篇文章咱们介绍了一下图片的处理方式,今天咱们说说视频的处理。python能够支持视频的处理么?当然是肯定的,人生苦读,我用python。万物皆可py...

    菜鸟小白的学习分享
  • 最强 Java 核心知识点整理

    又到了求职的金三银四的黄金月份,我相信有不少小伙伴已经摩拳擦掌的准备寻找下一份工作。

    纯洁的微笑
  • 架构之道-架构师的多年实践经验总结

    在科学的道路上没有平坦的大道,只有不畏艰险沿着陡峭山路向上攀登的人,才有希望达到光辉的顶点。

    凹谷

扫码关注云+社区

领取腾讯云代金券