Java基础-JVM类加载机制
2023-09-27 14:20:52 时间
JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:
1)Bootstrap ClassLoader /启动类加载器
$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类
2)Extension ClassLoader/扩展类加载器
负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
3)App ClassLoader/ 系统类加载器
负责记载classpath中指定的jar包及目录中class
4)Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader
加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。
类加载双亲委派机制介绍和分析
在这里,需要着重说明的是,JVM在加载类时默认采用的是双亲委派机制。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。
相关文章
- java虚拟机学习-JVM调优总结-新一代的垃圾回收算法(11)
- java虚拟机学习-JVM调优总结-垃圾回收面临的问题(8)
- java虚拟机学习-慢慢琢磨JVM(2)
- JVM系列之:详解java object对象在heap中的结构
- Java 内部类
- java怎样获得JVM可能的总内存,最大内存,以及空暇内存?
- Java Jvm虚拟机的内存模型概述 《对Java的分析总结》(一)
- Java二叉树链表的建立及四种遍历方法
- JVM性能优化, Part 5:Java的伸缩性
- Java Invoked OOM-Killer - OOM不一定是来自于java heap
- java对象大小
- 第44节:Java当中的JVM
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
- java 多重循环
- 基于Java实现(控制台)毕业生管理系统【100010225】
- Java并发基石CAS原理以及ABA问题
- [2021年终总结之Java篇] 与Java朝夕相处的这些年
- java uuid第一次性能
- 小师妹学JVM之:java的字节码byte code简介
- java beanUtils框架
- DateFormat 日期格式化类,java格式化时间
- 浅析Java中不使用的对象应赋值为null的深层理解:基本没必要的原因、JVM中局部变量表(运行时候的栈状态)和slot(运行时栈里的索引)的理解、Java的栈优化(重用栈索引节约内存空间)、GC的可达性分析算法-如何找到root树根(栈中引用的对象)、如何断开栈中引用与堆的联系(重写栈索引)
- Java向PostgreSQL发送prepared statement 与 libpq 向PostgreSQL发送prepared statement之比较:
- [Java Performance] JVM 线程调优
- Java的递归算法
- JVM如何理解Java泛型类(转)
- JAVA FORK JOIN EXAMPLE--转
- Java (JVM) Memory Model – Memory Management in Java
- Java入门学习大纲总结(暂时完结)
- 一名普通Java程序员的2022的总结和2023的展望