JVM入门学习笔记——上篇:内存与垃圾回收(1-2)

Oracle官网:https://www.oracle.com/cn/index.html
官网Java8的JVM规范文档:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html
官网的Java规范文档:https://docs.oracle.com/javase/specs/index.html

文章目录

  • 1、JVM与Java体系结构
    • 一、Java及JVM简介
      • Java生态圈
      • Java:跨平台的语言
      • JVM:跨语言的平台
      • 字节码
      • 多语言混合编程
    • 二、Java发展的重大事件
      • Open JDK和Oracle JDK
    • 三、虚拟机与Java虚拟机
      • 虚拟机
      • Java虚拟机
      • JVM的位置
    • 四、JVM的整体结构
    • 五、Java代码执行流程
    • 六、JVM的架构模型
    • 七、JVM的生命周期
    • 八、JVM的发展历程
      • HotSpot虚拟机(默认)
      • JRockit虚拟机
      • J9虚拟机
  • 2、类加载子系统
    • 一、内存结构概述
      • 简图
      • 详细图
    • 二、类加载器与类的加载过程
    • 类加载器子系统的作用
    • 类加载器ClassLoader角色
    • 类的加载过程
      • 1. 加载(Loading)
      • 2. 链接(Linking)
      • 3. 初始化(Initialization)
    • 三、类加载器分类
      • 虚拟机自带的加载器
        • 引导类加载器
        • 扩展类加载器
        • 系统类加载器
      • 用户自定义类加载器
    • 四、ClassLoader
      • 获取ClassLoader的途径
    • 五、双亲委派机制
      • 沙箱安全机制
    • 六、其他
      • 对类加载器的引用
      • 类的主动使用和被动使用

1、JVM与Java体系结构

一、Java及JVM简介

Java生态圈

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第1张图片

Java:跨平台的语言

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第2张图片

JVM:跨语言的平台

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第3张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第4张图片

字节码

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第5张图片

多语言混合编程

二、Java发展的重大事件

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第6张图片

Open JDK和Oracle JDK

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第7张图片

三、虚拟机与Java虚拟机

虚拟机

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第8张图片

Java虚拟机

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第9张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第10张图片

JVM的位置

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第11张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第12张图片

四、JVM的整体结构

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第13张图片
详细图:
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第14张图片

五、Java代码执行流程

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第15张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第16张图片

六、JVM的架构模型

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第17张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第18张图片

七、JVM的生命周期

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第19张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第20张图片

八、JVM的发展历程

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第21张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第22张图片

HotSpot虚拟机(默认)

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第23张图片

JRockit虚拟机

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第24张图片

J9虚拟机

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第25张图片

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第26张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第27张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第28张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第29张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第30张图片

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第31张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第32张图片

重点HotSpot虚拟机(默认虚拟机)、JRockit虚拟机、J9虚拟机。

2、类加载子系统

一、内存结构概述

简图

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第33张图片

详细图

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第34张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第35张图片

二、类加载器与类的加载过程

类加载器子系统的作用

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第36张图片

类加载器ClassLoader角色

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第37张图片

类的加载过程

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第38张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第39张图片

1. 加载(Loading)

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第40张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第41张图片

2. 链接(Linking)

3. 初始化(Initialization)

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第42张图片
初始化时,对static代码而言,是按照顺序赋值的(如在静态代码块里对一个static变量进行赋值,静态代码块在static变量声明前,编译时,会先执行静态代码块里的代码进行赋值,然后再执行声明的代码进行赋值),并且生成clinit构造器方法。
如果声明的不是static变量,并且也没有静态代码块,则不会有clinit构造器方法。
每个类都会有一个构造器,对应init构造器方法。
初始化阶段会先调用super()方法执行父类的初始化。
类在初始化时,虚拟机会自动为这个类加锁,保证只加载一次,实现线程安全。
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第43张图片

类加载的全过程:加载、验证、准备、解析、初始化。

三、类加载器分类

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第44张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第45张图片

虚拟机自带的加载器

虚拟机自带的加载器:引导类加载器、扩展类加载器、系统类加载器。

引导类加载器

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第46张图片

扩展类加载器

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第47张图片

系统类加载器

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第48张图片
父类加载器指的是由哪个加载器来加载自己这个加载器,就是这个加载器的父类加载器,并非继承关系。

用户自定义类加载器

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第49张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第50张图片

四、ClassLoader

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第51张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第52张图片

获取ClassLoader的途径

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第53张图片

五、双亲委派机制

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第54张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第55张图片
加载类时,否则加载的类加载器会把加载请求向上委托给父类加载器,父类加载器如果有父类加载器,就会再把加载请求向上委托,直到引导类加载器。
引导类加载器如果加载的路径有被加载类,就会进行加载,否则把加载请求向下返还,扩展类加载器如果路径有被加载的类,就进行加载,否则继续向下返还,然后所有的父类加载器都不能进行加载,就由原先的类加载器完成类的加载。
先把加载请求传到引导类加载器,然后依次向下进行加载,如果能加载,则完成类的加载,其他的类加载器不会加载;如果不能加载,向下返还,直到原先的类加载器。
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第56张图片

沙箱安全机制

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第57张图片

六、其他

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第58张图片

对类加载器的引用

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第59张图片

类的主动使用和被动使用

JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第60张图片
JVM入门学习笔记——上篇:内存与垃圾回收(1-2)_第61张图片

下一篇笔记:JVM入门学习笔记——上篇:内存与垃圾回收(3-7)

学习视频(p1-p38):https://www.bilibili.com/video/BV1PJ411n7xZ?p=1

你可能感兴趣的:(JVM)