CreateArtTechnology
/ Blog
Login
最新文章
Java
语言相关
库相关
虚拟机相关
CreateArtTechnology
项目搭建
使用的工具
自研的工具
开源工具
ELK
ElasticSearch
Jenkins
Markdown
GraphQL
Arthas
生产工具
Linux
Nginx
VersionControl
Subversion
Git
Redis
Archiva
Maven
Zookeeper
Spring
SpringBoot
MySql
HBase
Cassandra
容器化
Docker
Kubernetes
服务容器化从零开始
未分类笔记
算法相关
概念相关
豆知识
机器学习
机器学习从零开始
《深入理解Java虚拟机》笔记<2-虚拟机执行子系统>
24
2019-06-25 19:02:56
Java
虚拟机相关
## 类的生命周期 **加载** 主要是将类从一个文件或流转化为Class对象的过程。 - 读取类的定义字节流 - 将类的定义结构保存到方法区 - 生成一个java.lang.Class对象作为类的数据访问入口 **验证** 主要是确保类定义完整且符合虚拟机要求。 **准备** 主要是分配内存并设置static属性即静态变量的默认值和final static属性即常量的初始值。 这个好理解,常量不可变,可以提前预设;静态变量在类初始化时完成。 **解析** 将类文件中常量池的符号引用替换为直接引用。 - 类文件编译后数据分离了,只能使用符号引用 - 类文件加载后,数据、方法等在内存中有了物理地址,这样就可以将符号引用与实际位置关联即替换为直接引用 **初始化** 类加载过程中的最后一步,主要就是执行构造方法。 **使用** 正常的使用流程。 **卸载** 也就是从方法区中回收,条件非常严格: - 所有该类的实例已被回收 - 该类的ClassLoader已被回收 - 该类的java.lang.Class对象没有被引用,也没有通过反射访问的方法 ## 类加载器与双亲委派 ### 类加载器 类加载器(ClassLoader)就是执行加载类的任务,也就是为一个类执行生命周期中“加载”过程的类,可自定义实现。 两个类的“相等”,意味着这两个类来源于同一个Class文件,是使用同一个类加载器加载的。 ### 常见的类加载器 **Bootstrap ClassLoader** 加载虚拟机相关类的加载器,是C或C++实现的。 **Extention ClassLoader** 加载Java语言核心类库的加载器。 **Application ClassLoader(或者叫System ClassLoader)** 加载CLASSPATH下类库即自定义类库的加载器。 ### 双亲委派模型 ![](/img/pic/2019062518580870836_png_590_479_60353) > 双亲委派模型 简而言之,就是任何类加载器在加载某个类前首先委托给父加载器来加载,如果父类加载器加载失败才自行加载,如果父加载器不存在则使用Bootstrap ClassLoader加载。 好处是不会出现多个加载器加载同一个类导致的类“不相等”,以及不会出现自定义类(如java.lang.String)覆盖Java核心库的同名类导致程序的不稳定。 ## 补充 ### Tomcat的类加载器结构 ![](/img/pic/2019062519025011437_png_749_838_188758) > Tomcat的双亲委派关系 参考Tomcat源码笔记,Tomcat的类加载器结构是为了实现特殊功能的。 - **Common加载器** 作为Catalina加载器和Shared加载器的父加载器,加载的类对Tomcat和Web应用也都可见 - **Catalina加载器** 加载的类均为Tomcat核心类,对Web应用不可见 - **Shared加载器** 加载的类对Tomcat就不可见了,当然,Tomcat也不需要可见 - **WebApp加载器** 用于加载WebApp应用的,显然会为每个WebApp定义一个WebApp ClassLoader,因此每个应用中加载的类对其他应用是隔离的,不可见 ### 动态代理
发布文章 101
文章被阅读 1817
最近修改
什么是“丝滑”的曲线
2021-12-08 15:19:20
高效空间数据索引R树及其批量加载方法STR简介
2021-09-29 20:33:37
关于分库分表的一些事儿
2021-06-25 11:51:25
获得诺奖的稳定匹配理论之TTC算法与GS算法
2021-03-14 23:04:48
算法小白的机器学习入门实践,从零到上线
2021-01-13 14:28:27
分站宗旨
一站式资料平台,减少重复检索,减少重复采坑。