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

本文详细介绍了JVM的类加载过程,包括loading、linking和Initialization,探讨了类加载器的分类及其工作原理。此外,还讲解了JVM的运行时数据区,如PC寄存器、虚拟机栈、堆和方法区,以及它们之间的交互。重点阐述了对象实例化、内存分配策略、垃圾收集机制,包括不同GC类型的触发条件和内存管理策略。最后,文章讨论了JIT编译器和解释器在程序执行过程中的角色,以及如何优化内存使用。
摘要由CSDN通过智能技术生成

目录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

类的加载第二步----linking在这里插入图片描述

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

在这里插入图片描述

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

类的加载器分类:

在这里插入图片描述
在这里插入图片描述

Bootstrap ClassLoader

在这里插入图片描述

Extension ClassLoader

在这里插入图片描述

AppClassLoader

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

获取ClassLoader的途径

在这里插入图片描述

双亲委派机制 以及 优势

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

开始运行时数据区的学习

在这里插入图片描述

  • 下图:红色的一个进程一份(和JVM生命周期一致);灰色的和线程的生命周期一致。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

JVM中的主要线程

在这里插入图片描述

PC寄存器

  • 存下一个指令的地址。
    在这里插入图片描述

虚拟机栈和栈帧

在这里插入图片描述

可以设置VM栈的大小

在这里插入图片描述
在这里插入图片描述

栈帧里面有什么?

在这里插入图片描述

栈帧中的“局部变量表”

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

虚方法与非虚方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值