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教程 一.什么是类加载器 在类加载过程中,加载阶段有一个动作是"通过一个类的全限 ...
随机推荐
- 【paper】MTCNN
参考 1. MTCNN笔记; 完
- Spring @Resource,@Autowired,@Qualifier的注解注入和区别
spring2.5提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖.在Java代码中可以使用 @Resource或者@Autowired注解方式来经行注入 ...
- go-json处理的问题
1.通过Decoder来解析json串 package main import ( "encoding/json" "fmt" "io" & ...
- PythonStudy——三种字符串 Three strings
# 普通字符串:u'以字符作为输出单位'print(u'abc') # 用于显示 # 二进制字符串:b'' 二进制字符串以字节作为输出单位print(b'abc') # 用于传输 # 原义字符串:r' ...
- linux查看进程启动的时间点
ps -ef |grep xxx # 先查找进程pid ps -wo pid,lstart -p {pid}
- mysql查询中AND与OR注意事项
在查询的where条件中,and要优于or 如果要改变优先级, 需要在最小逻辑判断的条件外加括号(),例如: select * from `table_name` where (`type` = 1 ...
- Hbase Filter过滤器查询详解
过滤器查询 引言:过滤器的类型很多,但是可以分为两大类——比较过滤器,专用过滤器 过滤器的作用是在服务端判断数据是否满足条件,然后只将满足条件的数据返回给客户端: hbase过滤器的比较运算符: LE ...
- 从Java角度理解Angular之入门篇:npm, yarn, Angular CLI
本系列从Java程序员的角度,带大家理解前端Angular框架. 本文重点介绍Angular的开发.编译工具:npm, yarn, Angular CLI,它们就像Java在中的Maven,同时顺便介 ...
- Can't parse message of type "gazebo.msgs.Packet" because it is missing required fields: stamp, type
在gazebo的仿真环境中,采用强化学习HER算法训练baxter执行reach.slide和pick and place任务. 运行HER算法,此时尚未启动gazebo仿真环境,出现如下报错: [l ...
- 删除iis日志(deliislogs.vbs)
'path 目录 'ext 文件扩展名'expiredDays 保留多少天以内的文件Sub LogCleaner(path,ext,expiredDays) On Error Resume Next ...