首页 > 其他分享 >类加载器

类加载器

时间:2023-03-19 20:58:06浏览次数:45  
标签:java 子类 AppClassLoader 应用 父类 加载

创建bootstrapClassLoader,创建启动器Launcher。 父子加载器的类关系不是继承关系,子加载器通过parent变量引用父加载器。

为什么类加载的顺序不是从引导类加载器先加载,而是从应用类加载器加载?

因为只有AppClassLoader会检查类是否已被加载过。因为项目中大部分代码都是我们自己写的,都将被应用类加载器加载。参考加载顺序:一个没有被加载过的类,首先会让AppClassLoader加载(loadClass),查找该类是否已经被加载过了(findLoadedClass),没有加载过,向上委托父类加载器加载(parent.loadClass),父类加载器加载不了的,由子类加载器去对应路径(Bootstrap ClassLoader-》rt.jar,ExtClassLoader-》ext.jar,AppClassLoader-》classpath,一般是src/main/java下的文件)寻找对应包路径下的类文件(findClass),然后进行类加载过程(defineClass)。第一次会比较慢,但是被加载过一次后,直接就再第一步返回该类了,不会再走后续流程。如果先从父类加载器到子类加载器,那么大部分类都要经过父类加载器到子类加载器的流程。

一个tomcat下存在多个应用,A应用和B应用依赖的spring版本不同,怎么办?

如果不打破双亲委派机制,那么先加载的应用的spring版本,将会被Application ClassLoader加载,后加载的应用在AppClassLoader加载时会发现已经加载过,就不会重新进行加载,导致加载的类版本不对。 打破双亲委派机制:自定义classLoader,重写loadClass方法。比如Tomact类加载。 tips:即使自定义类加载器,重写loadclass去加载自己定义的例如java.lang.String类也是不被允许的,报错java.lang.SecurityException: Prohibited package name: java.lang参考沙箱安全机制。

 

 

标签:java,子类,AppClassLoader,应用,父类,加载
From: https://www.cnblogs.com/zhengbiyu/p/17234223.html

相关文章

  • Tomcat类加载
    tomcat如何实现,应用隔离类加载?org.apache.catalina.loader.WebappClassLoaderBase#loadClass(java.lang.String,boolean)(1)先在本地缓存中查找是否已经加载过该类(对于......
  • webpack性能优化(1):分隔/分包/异步加载+组件与路由懒加载
    webpackensure相信大家都听过。有人称它为异步加载,也有人说做代码切割,那这个家伙到底是用来干嘛的?其实说白了,它就是把js模块给独立导出一个.js文件的,然后使用这个模块的时......
  • vue2升级vue3:vue-i18n国际化异步按需加载
    vue2异步加载之前说过,vue3还是之前的方法,只是把 i18n.setLocaleMessage改为i18n.global.setLocaleMessage但是本文还是详细说一遍:为什么需要异步加载语言包主要还是缩......
  • React 实现 动态加载组件
    React实现动态加载组件import{Button}from'antd'importReact,{useState,lazy,Suspense}from'react'//这个地方动态加载组件constItem=lazy(()=>i......
  • java类加载器有哪些
    java类加载器有:1、引导类加载器;2、拓展类加载器;3、系统类加载器;4、用户自定义类加载器。其中,引导类加载器(BoostrapClassLoader),又叫启动类加载器,由原生代码(如C语言)编写,不......
  • java类加载器有哪些
    java类加载器有:1、引导类加载器;2、拓展类加载器;3、系统类加载器;4、用户自定义类加载器。其中,引导类加载器(BoostrapClassLoader),又叫启动类加载器,由原生代码(如C语言)编写,不......
  • 请你详细说说类加载流程,类加载机制及自定义类加载器
    当程序使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、链接、初始化三个步骤对该类进行类加载。加载类加载指的是将类的class文件读入内存,并为之创建一个java.......
  • 类加载器(Java)
    类加载器类加载的过程类加载器的功能将.class文件【物理文件:在硬盘中】加载到Java虚拟机的内存中【搬用工】。类加载的时机情况分析://1,当创建Fu对象的时候【Fu.class......
  • nacos配置中心修改了微服务的配置信息,微服务应用如果想加载最新的配置信息,是不是需要
    1.nacos配置中心修改了微服务的配置信息,微服务应用如果想加载最新的配置信息,是不是需要重新一下微服务应用呢不需要,nacos配置中心可以实现配置的动态刷新,当你修改了配置......
  • ArcGIS JS API加载带参数的rest服务参数被截掉问题处理
    我们在做一些项目的时候,会对ArcGIS的图层服务进行转发,增加一些权限参数以保证数据访问的安全,但使用ArcGISJSAPI加载的时候,对于rest服务?后增加的参数会被截掉。为解决这......