深入理解Java虚拟机(二)——类加载器深入解析

布满荆棘的人生 2022-05-14 15:21 351阅读 0赞

目录

深入理解Java虚拟机(一)——JVM整体架构

深入理解Java虚拟机(二)——类加载器深入解析

深入理解Java虚拟机(三)——JVM内存结构+JVM执行引擎

深入理解Java虚拟机(四)——JVM性能调优监控工具


类加载过程

•类加载:类加载器将class文件加载到虚拟机的内存

•加载:在硬盘上查找并通过IO读入字节码文件

•连接:执行校验、准备、解析(可选)步骤

•校验:校验字节码文件的正确性

•准备:给类的静态变量分配内存,并赋予默认值

•解析:类装载器装入类所引用的其他所有类

•初始化:对类的静态变量初始化为指定的值,执行静态代码块

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3o3ODU0OTUyOTU_size_27_color_FFFFFF_t_70

类加载器种类

启动类加载器:负责加载JRE的核心类库,如jre目标下的rt.jar,charsets.jar等

扩展类加载器:负责加载JRE扩展目录ext中JAR类包

系统类加载器:负责加载ClassPath路径下的类包

用户自定义加载器:负责加载用户自定义路径下的类包

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3o3ODU0OTUyOTU_size_27_color_FFFFFF_t_70 1

类加载机制

全盘负责委托机制:当一个ClassLoader加载一个类时,除非显示的使用另一个ClassLoader,该类所依赖和引用的类也由这个ClassLoader载入

双亲**机制**:指先委托父类加载器寻找目标类,在找不到的情况下在自己的路径中查找并载入目标类

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3o3ODU0OTUyOTU_size_27_color_FFFFFF_t_70 2

•双亲委派模式优势

沙箱安全机制:自己写的String.class类不会被加载,这样便可以防止核心API库被随意篡改

避免类的重复加载:当父亲已经加载了该类时,就没有必要子ClassLoader再 加载一次

类加载过程

•JVM加载jar包是否会将包里的所有类全部加载进内存?

•JVM对class文件是按需加载(运行期间动态加载),非一次性加载,见示例(启动需要加上参数:-verbose:class)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3o3ODU0OTUyOTU_size_27_color_FFFFFF_t_70 3

发表评论

表情:
评论列表 (有 0 条评论,351人围观)

还没有评论,来说两句吧...

相关阅读