JVM系列3:类加载机制
了解类加载机制也是深入了解Java的重要一环,它包括加载过程、类加载器、加载机制等内容。
以下是我总结的思维导图。

首先讲讲类加载的时机,以下是会触发类加载的时机:
1、new、get/put/invoke+static new 一个类,或访问它的静态方法或常量时。
2、reflect包的方法
3、初始化一个类,其父类需初始化
4、main函数类
5、MethodHandle实例最后的解析结果REF_get/put/invoke方法
类加载器及类加载机制
Java中有3种类加载器,1、Bootstrap ClassLoader启动类加载器,它负责加载Java一些根基类,加载JAVA根目录/lib.
2、Extension ClassLoader扩展类加载器,加载Java根目录/lib/ext里的类。
3、Application ClassLoader应用程序类加载器,加载用户类路径下的包。
Java类加载机制是采用双亲委派加载机制或者说多层级父类加载机制。如下:
每个加载器接受到加载请求都会传递给上级,直到上级无法处理才会传回给自己加载。这么做的目的是保证基础类一致性,保证类基础性行为。
比如当我们判断两个对象是否相同,它的前提就是它们由同一个类加载器加载,否则这些比较毫无意义了。
双亲委派机制并不是强制的,实际上也出现了破坏双亲委派的加载机制如JNDI(父级请求子级)、热部署热替换(网状结构)。具体内容以后研究。

类加载过程
Java类加载过程分为七步:
1、加载 a、通过类的全限定名获取此类二进制字节流(类加载器加载)
b、将字节流代表的静态存储结构转化为方法区运行时数据结构
c、在内存中生成一个代表该类的对象,作为方法区该类的数据访问入口
2、验证 验证类的数据格式、安全性等。
3、准备 正式为类变量分配内存并设置类变量初始值(在方法区),初始值是各static修饰类变量的0值,如int初始为0,boolean初始为false,如果是static final修饰的直接赋予给定值。
4、解析 将常量池内的符号引用替换为直接引用(实际内存地址)的过程
5、初始化 执行类构造器<clinit>()方法的过程,就是收集并执行所有类变量赋值动作和静态语句块。(new对象时,类初始化完,还会执行成员变量赋值及实例语句块以及构造方法<intit>)
6、使用 对象使用
7、回收 对象回收
JVM系列3:类加载机制的更多相关文章
- jvm系列 (五) ---类加载机制
类的加载机制 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 jvm系列 (四) ---强.软.弱.虚引用 我的博客目录 什么是类 ...
- 【JVM】JVM系列之类加载机制(四)
一.前言 前面分析了class文件具体含义,接着需要将class文件加载到虚拟机中,这个过程是怎样的呢,下面,我们来仔细分析. 二.什么是类加载机制 把class文件加载到内存,并对数据进行校验.转换 ...
- 深入理解JVM,虚拟机类加载机制
类加载过程概览 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括以下7个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Re ...
- JVM之虚拟机类加载机制
有兴趣可以先参考前面的几篇JVM总结: JVM自动内存管理机制-Java内存区域(上) JVM自动内存管理机制-Java内存区域(下) JVM垃圾收集器与内存分配策略(一) 我们知道,在编写一 ...
- 图解JVM和Tomcat类加载机制
说到本篇的tomcat类加载机制,不得不说翻译学习tomcat的初衷. 之前实习的时候学习javaMelody的源码,但是它是一个Maven的项目,与我们自己的web项目整合后无法直接断点调试.后来同 ...
- Java面试题:JVM中的类加载机制
JVM 的类加载机制是指 JVM 把描述类的数据从 .class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是 JVM 的类加载机制. 类 ...
- 【JVM】虚拟机类加载机制
什么是类加载 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. <[JVM]类文件结构& ...
- jvm之java类加载机制和类加载器(ClassLoader),方法区结构,堆中实例对象结构的详解
一.类加载或类初始化:当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载.连接.初始化3个步骤来对该类进行初始化.如果没有意外,JVM将会连续完成3个步骤. 二.类加载时机: 1 ...
- JVM之Java类加载机制
什么是类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这既是虚拟机的类加载机制 类的生命周期 生命周期简述 ...
- 【JVM第二篇--类加载机制】类加载器与双亲委派模型
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.什么是类加载器 在类加载过程中,加载阶段有一个动作是"通过一个类的全限 ...
随机推荐
- angular2 ng2-validation 表单验证
1:安装模块 npm install ng2-validation --save 2:配置app.module.ts import { FormsModule, <font color=&quo ...
- Python全栈之路----数据类型—列表
1.列表是一个数据的集合,集合内可以放任何数据类型,可对集合进行方便的增删改查操作.列表里面的数可以重复. L1 = [ ] #定义空列表 L2 = [ 'a' , 'b' , 'c' , 'd' ] ...
- XML一
HTML(HyperText Markup Language),即超文本标记语言,是用于描述网页文档的一种描述标记语言. 而XML(E ...
- 《DSP using MATLAB》Problem 7.11
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- python------面向对象进阶 Socket网络编程
一.Socket网络编程 1.七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系 ...
- 排序算法练习--JAVA(:内部排序:插入、选择、冒泡、快速排序)
排序算法是数据结构中的经典算法知识点,也是笔试面试中经常考察的问题,平常学的不扎实笔试时候容易出洋相,回来恶补,尤其是碰到递归很可能被问到怎么用非递归实现... 内部排序: 插入排序:直接插入排序 选 ...
- Python数据类型的可变与不可变
首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型.可变数据类型:列表list和字典dict:不可变数据类型:整型int.浮点型float.字符串型string和元组tuple ...
- 十七、springcloud(三)服务的注册与调用
1.启动服务注册中心Eureka(见上篇) 启动成功后,暂时无服务 2.项目框架 3.创建服务提供者(spring-cloud-houge-provider)jar a.application.pro ...
- Makefile知识点总结
1.=,:=,+=区别 = 是最基本的赋值 := 是覆盖之前的值 ?= 是如果没有被赋值过就赋予等号后面的值 += 是添加等号后面的值 .“=” make会将整个makefile展开后,再决定变量的值 ...
- bzoj5047: 空间传送装置
Description 太空中一共有n座星球,它们之间可以通过空间传送装置进行转移.空间传送装置分为m种,第i种装置可以用4个参 数a_i,b_i,c_i,d_i来描述.因为时空抖动的问题,在非整数时 ...