尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)

目录

    • 类的加载第一步----loading
    • 加载“.class”文件的方式:
    • 类的加载第二步----linking![在这里插入图片描述](https://img-blog.csdnimg.cn/20210101202341316.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01hc29uOTc=,size_16,color_FFFFFF,t_70)
    • 类的加载第三步----Initialization
    • 类的加载器分类:
    • Bootstrap ClassLoader
    • Extension ClassLoader
    • AppClassLoader
    • 用户自定义类加载器 | 实现步骤
    • 获取ClassLoader的途径
    • 双亲委派机制 以及 优势
    • 类的主动使用(类初始化)
    • 开始运行时数据区的学习
    • JVM中的主要线程
    • PC寄存器
    • 虚拟机栈和栈帧
    • 可以设置VM栈的大小
    • 栈帧里面有什么?
    • 栈帧中的“局部变量表”
    • 局部变量表的基本单元-----变量槽(slot)
    • 静态方法中不能引用this-----用局部变量表来解释
    • 我对局部变量表和操作数栈的理解
    • 动态链接【栈帧的组成部分之一】【目的是减小空间占用】
    • 虚方法与非虚方法
    • 虚方法表:
    • 栈帧的另一个结构----方法返回地址
    • 本地方法接口
    • 什么是本地方法:
    • 本地方法栈
    • JAVA堆
    • 堆空间 分代收集理论
    • java堆的进一步细分
    • 调整年轻代和老年代的内存比例
    • 调整年轻代中,(Eden区)和(两个幸存者区)的内存大小比例
    • 年轻代与老年代的转换:
    • 新对象申请和GC流程
    • Minor GC、Major GC、Full GC
    • Minor GC触发机制
    • Major GC / Full GC触发机制
    • 内存分配策略
    • TLAB(Thread Local Allocation Buffer)
    • 空间分配担保
    • 堆是分配对象存储的唯一选择吗?(不是)
    • 逃逸分析概述:
    • 使用逃逸分析,编译器可以对代码做出以下优化:
    • 同步省略 / 锁消除
    • 标量替换的例子。point不能逃逸。直接把他分解。
    • 堆是分配对象存储的唯一选择吗?NO->YES
    • 从线程共享与否来看数据区各个结构
    • 开始方法区的学习
    • 栈、堆、方法区的交互关系
    • 方法区隶属于堆区吗?(名义上属于)
    • 方法区的基本理解:
    • 方法区 | 永久代 | 元空间
    • 设置方法区的大小:
    • 方法区的内存结构:
    • 方法区存储什么?
    • 类型信息:
    • 运行时常量池:
    • 运行时常量池 vs 常量池
    • 常量池中有什么?
    • 运行时常量池:
    • 一个例子展示:class文件中的字节码指令,class文件中的常量池,JVM栈中栈帧中的操作数栈,JVM栈中栈帧中的本地变量表,程序计数器的联动。
    • 方法区的演进细节:
    • 为什么要将字符串常量池和静态变量放到堆中?
    • 方法区垃圾收集哪两部分内容?
    • 小结 | 常见的面试题
    • 对象实例化开始
    • 美团和蚂蚁金服有关对象实例化的面试题:
    • 创建对象的六种方式:
    • 对象的实例化过程:【一共6个步骤】
    • 对象布局:
    • 如果通过栈帧中的对象引用访问到对象实例?
    • 对象访问的主要两种方式:
    • 句柄访问图示:
    • 直接指针的图示:
    • 直接分配内存的代码演示:
    • 执行引擎:
    • java代码编译和执行的过程:
    • 什么是解释器?什么是JIT编译器?
    • 高级语言,汇编语言,机器指令的关系
    • 解释器和JIT及时编译器的图示:
    • 解释器 和 JIT编译器 的作用:(编译器相当于大招,有前摇)
    • 何时解释执行?何时JIT编译执行?
    • 热度衰减:
    • String的内存分配:
    • 字符串的拼接:
    • intern的作用
    • new String("ab") 和 new String("a") + new String("b")
    • String的intern()的使用总结:
    • intern的练习题:
    • intern()的作用:
    • 垃圾回收的面试题:
    • 什么是垃圾?
    • 引用计数算法:
    • 可达性分析 | 根搜索算法 | 追踪性垃圾收集
    • GC Roots有哪些?
    • Stop the World
    • finalize()方法:
    • 判定是否回收需经两次标记过程:
    • finalize()方法的缺点:
    • 标记清除算法:
    • 复制算法:
    • 新生代中就采用了复制算法。
    • 标记压缩/整理算法:
    • System.gc()
    • 内存泄漏
    • 内存泄漏的例子:
    • Stop The World
    • 串行、并行的垃圾回收器
    • 安全点:
    • 强软弱虚引用:
    • 弱引用
    • 虚引用的构造
    • 守护线程的意义:【当不存在非守护线程,守护线程也结束】

在这里插入图片描述
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第1张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第2张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第3张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第4张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第5张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第6张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第7张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第8张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第9张图片
在这里插入图片描述
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第10张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第11张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第12张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第13张图片

类的加载第一步----loading

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第14张图片

加载“.class”文件的方式:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第15张图片

类的加载第二步----linking尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第16张图片

类的加载第三步----Initialization

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第17张图片

  • clinit只有在有静态变量,静态代码块出现的时候才有。会将静态变量和静态代码块的语句合并起来。按先后顺序,顺序执行。【在linking的prepare阶段都已经赋为默认值了】
  • ()方法加锁了。如果多线程都想加载这个类,但是一个线程在加载的过程中阻塞了。那么所有的线程都会阻塞。

类的加载器分类:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第18张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第19张图片

Bootstrap ClassLoader

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第20张图片

Extension ClassLoader

在这里插入图片描述

AppClassLoader

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第21张图片

用户自定义类加载器 | 实现步骤

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第22张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第23张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第24张图片

获取ClassLoader的途径

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第25张图片

双亲委派机制 以及 优势

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第26张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第27张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第28张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第29张图片

类的主动使用(类初始化)

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第30张图片

开始运行时数据区的学习

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第31张图片

  • 下图:红色的一个进程一份(和JVM生命周期一致);灰色的和线程的生命周期一致。
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第32张图片
    在这里插入图片描述
    在这里插入图片描述

JVM中的主要线程

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第33张图片

PC寄存器

  • 存下一个指令的地址。
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第34张图片

虚拟机栈和栈帧

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第35张图片

可以设置VM栈的大小

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第36张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第37张图片

栈帧里面有什么?

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第38张图片

栈帧中的“局部变量表”

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第39张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第40张图片

局部变量表的基本单元-----变量槽(slot)

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第41张图片

静态方法中不能引用this-----用局部变量表来解释

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第42张图片
在这里插入图片描述
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第43张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第44张图片

我对局部变量表和操作数栈的理解

  • 局部变量表就是一个仓库。存着各个变量的值。
  • 操作数栈是配合class中方法指令来的。相当于一个寄存器。一个栈的结构。

动态链接【栈帧的组成部分之一】【目的是减小空间占用】

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第45张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第46张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第47张图片

虚方法与非虚方法

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第48张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第49张图片

虚方法表:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第50张图片

栈帧的另一个结构----方法返回地址

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第51张图片

本地方法接口

  • 下图中画红框的部分:尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第52张图片

什么是本地方法:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第53张图片
在这里插入图片描述

本地方法栈

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第54张图片

JAVA堆

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第55张图片

堆空间 分代收集理论

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第56张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第57张图片
在这里插入图片描述

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第58张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第59张图片

  • jdk1.8
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第60张图片
  • jdk1.7
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第61张图片

java堆的进一步细分

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第62张图片

调整年轻代和老年代的内存比例

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第63张图片

  • 默认的比例【年轻代:老年代 = 1:2】
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第64张图片

调整年轻代中,(Eden区)和(两个幸存者区)的内存大小比例

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第65张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第66张图片

  • 为什么上图新生代的三个区并不是8:1:1呢?因为JVM有自适应。
  • 用第三个命令来关闭自适应。【并不好使…必须显示设置】
    在这里插入图片描述
  • 显示设置【可以了】
    在这里插入图片描述
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第67张图片

年轻代与老年代的转换:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第68张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第69张图片

新对象申请和GC流程

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第70张图片

Minor GC、Major GC、Full GC

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第71张图片

Minor GC触发机制

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第72张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第73张图片

Major GC / Full GC触发机制

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第74张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第75张图片

内存分配策略

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第76张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第77张图片

TLAB(Thread Local Allocation Buffer)

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第78张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第79张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第80张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第81张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第82张图片

空间分配担保

  • jdk1.7之前可以调参。含及以后就不能调了。
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第83张图片

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第84张图片

堆是分配对象存储的唯一选择吗?(不是)

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第85张图片

逃逸分析概述:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第86张图片

使用逃逸分析,编译器可以对代码做出以下优化:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第87张图片

同步省略 / 锁消除

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第88张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第89张图片

  • 字节码仍然有锁的身影。如果有逃逸分析会在字节码去运行时进行省略:
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第90张图片

标量替换的例子。point不能逃逸。直接把他分解。

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第91张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第92张图片

堆是分配对象存储的唯一选择吗?NO->YES

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第93张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第94张图片

  • 我们可以说对象就是分配在堆的。(视频中的效果来自标量替换)

从线程共享与否来看数据区各个结构

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第95张图片

开始方法区的学习

栈、堆、方法区的交互关系

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第96张图片

方法区隶属于堆区吗?(名义上属于)

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第97张图片

方法区的基本理解:

在这里插入图片描述

方法区 | 永久代 | 元空间

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第98张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第99张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第100张图片

设置方法区的大小:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第101张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第102张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第103张图片

方法区的内存结构:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第104张图片

方法区存储什么?

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第105张图片

类型信息:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第106张图片

运行时常量池:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第107张图片

运行时常量池 vs 常量池

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第108张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第109张图片

常量池中有什么?

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第110张图片

运行时常量池:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第111张图片

一个例子展示:class文件中的字节码指令,class文件中的常量池,JVM栈中栈帧中的操作数栈,JVM栈中栈帧中的本地变量表,程序计数器的联动。

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第112张图片

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第113张图片

方法区的演进细节:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第114张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第115张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第116张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第117张图片

为什么要将字符串常量池和静态变量放到堆中?

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第118张图片

方法区垃圾收集哪两部分内容?

在这里插入图片描述

小结 | 常见的面试题

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第119张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第120张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第121张图片

对象实例化开始

美团和蚂蚁金服有关对象实例化的面试题:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第122张图片

创建对象的六种方式:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第123张图片

对象的实例化过程:【一共6个步骤】

在这里插入图片描述

对象布局:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第124张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第125张图片

如果通过栈帧中的对象引用访问到对象实例?

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第126张图片

对象访问的主要两种方式:

在这里插入图片描述

句柄访问图示:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第127张图片

直接指针的图示:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第128张图片

直接分配内存的代码演示:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第129张图片

执行引擎:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第130张图片

java代码编译和执行的过程:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第131张图片

什么是解释器?什么是JIT编译器?

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第132张图片

高级语言,汇编语言,机器指令的关系

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第133张图片

解释器和JIT及时编译器的图示:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第134张图片

解释器 和 JIT编译器 的作用:(编译器相当于大招,有前摇)

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第135张图片

何时解释执行?何时JIT编译执行?

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第136张图片

热度衰减:

在这里插入图片描述

String的内存分配:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第137张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第138张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第139张图片

在这里插入图片描述

字符串的拼接:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第140张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第141张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第142张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第143张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第144张图片

intern的作用

在这里插入图片描述
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第145张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第146张图片

new String(“ab”) 和 new String(“a”) + new String(“b”)

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第147张图片
在这里插入图片描述
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第148张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第149张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第150张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第151张图片

String的intern()的使用总结:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第152张图片

intern的练习题:

jdk6中:true,false
jdk7中:true,true
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第153张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第154张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第155张图片

intern()的作用:

  • intern()能够大量节省内存空间。
  • 其实就是循环利用了,不用每次都开辟内存。
    在这里插入图片描述
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第156张图片

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第157张图片

垃圾回收的面试题:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第158张图片

什么是垃圾?

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第159张图片

引用计数算法:

在这里插入图片描述

  • 内存泄漏(循环引用)
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第160张图片

可达性分析 | 根搜索算法 | 追踪性垃圾收集

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第161张图片

GC Roots有哪些?

在这里插入图片描述

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第162张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第163张图片

Stop the World

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第164张图片

finalize()方法:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第165张图片

判定是否回收需经两次标记过程:

在这里插入图片描述

finalize()方法的缺点:

  • https://www.liangzl.com/get-article-detail-127434.html
    尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第166张图片

标记清除算法:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第167张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第168张图片

复制算法:

在这里插入图片描述

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第169张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第170张图片

新生代中就采用了复制算法。

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第171张图片

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第172张图片

标记压缩/整理算法:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第173张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第174张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第175张图片

System.gc()

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第176张图片

内存泄漏

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第177张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第178张图片

内存泄漏的例子:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第179张图片

Stop The World

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第180张图片

串行、并行的垃圾回收器

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第181张图片
尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第182张图片

安全点:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第183张图片

强软弱虚引用:

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第184张图片

弱引用

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第185张图片

虚引用的构造

尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)_第186张图片

守护线程的意义:【当不存在非守护线程,守护线程也结束】

在这里插入图片描述

你可能感兴趣的:(JVM)