视频合集

    深入JVM内存模型(图文视频详解)

    • 课程笔记
    • 问答交流

    JVM无论是大厂面试,还是工作实际的性能优化,都是需要深入掌握的内容。

    从这节课开始,我们就正式进入了性能优化这个专题,我先从JVM开讲。

    为了助大家掌握好JVM内存模型,这节课我会重点讲解以下7点:

    1.JVM整体结构

    2.JVM运行时数据区

    3.JVM堆内存结构

    4.JVM方法区

    5.JVM虚拟机栈

    6.JVM程序计数器

    7.JVM源码案例详解

    首先从JVM的源头,也就是数据的分配开始讲解,重点会谈到JVM的整个体系结构,最后还会结合着案例来让大家理解清楚数据的存储。

    JVM整体结构

    深入JVM内存模型(图文视频详解)-mikechen

    JVM运行时数据区

     

     

     

    评论交流
    1. mikechen

      good ✗咧嘴笑✗ ✗拳头✗

      我再补充另外一个小细节:JDK1.8版本与之前的永久代除了最大的区别是本地内存外,还有什么细节点不一样的么?

    2. 路正银

      详细描述jvm内存模型的核心组成?
      1、堆内存 eden、Survivor Space(幸存者区)、老年代
      2、方法区 存储类信息、常量(final)、静态变量(static),JIT编译后的代码不会变更的数据
      3、栈内存(java虚拟机栈和本地方法栈)java虚拟机栈:基本数据类型、局部变量、引用

      重点谈谈堆的实现组成,完整描述新生代到老年代的迁移过程?
      堆内存划分为新生代、老年代和永久代(永久代在JDK1.8版本替换为元数据)
      1、通过年龄计数器判断一个对象是否需要转移。对象每经过一个GC仍然存活,年龄计数器加一,当年龄超过设定的值,则将其通过担保机制转移到老年代。
      2、动态绑定,当Suvivor中年龄相同的对象数量超过一半,则年龄大于等于该年龄的对象转移到老年代,无需等待设置的最大年龄值。
      3、大对象直接进入老年代。

      谈谈JDK1.8版本的元空间与之前版本的永久代的区别?
      元空间使用本地内存,而永久代使用的是jvm的内存。

      最后再来一道思考题:一个类中定义了 String a=”b”和 String c = new String(“b”),请问这两个对象会分别创建在 JVM 内存模型中的哪块区域呢?
      “b”在常量池中,new String(“b”)在堆中。

    3. 李鸿翼

      详细描述jvm内存模型的核心组成?
      1.堆
      2.方法区
      3.栈

      重点谈谈堆的实现组成,完整描述新生代到老年代的迁移过程?
      1.新生代
      eden
      from
      to
      2.老年代

      刚开始创建对象放到堆新生代的eden区,随着eden空间逐渐放满,会触发一次yang gc, 存活的对象转移到from区,
      对象继续增长,直到from区也放不下后,会把存活对象转移到to区域。当存活对象每经历一次gc,年龄就会加1,当超过15次后,就会把这些大龄对象转移到老年区。

      谈谈JDK1.8版本的元空间与之前版本的永久代的区别?
      元空间内存是创建在本地内存区的

      最后再来一道思考题:一个类中定义了 String a=”b”和 String c = new String(“b”),请问这两个对象会分别创建在 JVM 内存模型中 的哪块区域呢?
      第一个在常量池中,第二个在堆内存中

      • mikechen

        我补充另外一个小细节:JDK1.8版本与之前的永久代除了最大的区别是本地内存外,还有什么细节点不一样的么? ✗咧嘴笑✗

    欢迎您,新朋友,感谢参与互动!