JAVA虚拟机学习笔记之类加载机制

一、JVM类加载机制
1、JVM系统加载器:Bootstrap ClassLoader(c++实现,程序不可见)->ExtClassLoader->SystemClassLoader
2、Bootstrap ClassLoader 启动类加载器(加载jre/lib目录下指定jar)
3、ExtClassLoader 扩展类加载器(加载jre/lib/ext目录)
4、SystemClassLoader 系统类加载器(通常由AppClassLoader充当,加载Java应用的类路径)
5、加载器加载步骤:尝试从已加载类中查找->尝试父加载器加载->尝试BootstrapClassloader加载->尝试findClass从自己加载空间加载->抛出ClassNotFound
二、OSGI类加载机制
1、OSGI加载器结构:SystemClassLoader->FrameworkClassLoader->BundleClassLoader
2、OSGI加载逻辑:系统class由父加载器加载,BundleSpace中的class由BundleClassLoader加载,FrameworkClass由FrameworkClassLoader加载,引用Bundle中class由FrameworkClassLoader调用其他BundleClassLoader加载
三、tomcat类加载机制
1、tomcat6.x加载器结构:SystemClassLoader->StandardClassLoader->WebappClassLoader->JasperLoader
2、tomcat5.x加载器结构:
SystemClassLoader->CommonClassLoader->SharedClassLoader->WebappClassLoader->JasperLoader
SystemClassLoader->CommonClassLoader->CatalinaClassLoader
3、StandardClassLoader:用于加载tomcat容器相关class,加载/lib目录下的类
4、CommonClassLoader、CatalinaClassLoader和SharedClassLoader分别加载/common/、/server/、/shared/*目录下的类
5、tomcat5.x以前,默认使用CommonClassLoader、CatalinaClassLoader和SharedClassLoader加载器,tomcat6.x只有在catalina.properties中配置server.loader和share.loader才会启用CatalinaClassLoader和SharedClassLoader,否则都用CommonClassLoader(StandardClassLoader)代替
6、WebappClassLoader:每个web项目对应一个WebappClassLoader,加载/WebApp/WEB-INF/*下的类
7、JasperLoader:每一个jsp页面对应一个JasperLoader,当JSP文件被修改,tomcat会抛弃当前JasperLoader实例,创建新JasperLoader,以此实现JSP文件的HotSwap功能。

你可能感兴趣的:(代码天地)