一个程序有一个默认的appClassLoader。类不是由被调用者也不是被自身加载的,正常情况下是被默认的AppClassLoader加载的。

System.out.println(test3.class.getClassLoader());
System.out.println(test4.class.getClassLoader());
System.out.println(test5.class.getClassLoader()); ClassLoader appClassLoader = ClassLoader.getSystemClassLoader();
System.out.println("the appClassLoader : " + appClassLoader);

  

appClassLoader是同一个对象。

类总是由appClassLoader的父类的父类加载,如果加载失败由父类加载,如果再失败由它本身加载,也就是双亲加载机制。这是有一定的目的的。

appClassLoader的父类的父类,即BootstrapClassLoader(启动类加载器),只加载某些路径下的类。

appClassLoader的父类,ExtClassLoader (标准扩展类加载器),也只加载某些路径下的类。

appClassLoader,系统类加载器,也只加载某些路径下的类。这个路径就是class path配的地址。这些路径下不能保证类只出现一次,以我测试看,是先找到哪个就加载哪个。

网上的好多文章都缺点什么,让人更晕。classloader,双亲委派知识的关键是一个程序只有一个appClassLoader,类基本上都是由它加载的。

****************************************

tomcat实现了自定义的classloader来实现不同webapp的隔离。

System.out.println(test.class.getClassLoader());
System.out.println(this);
ClassLoader appClassLoader = ClassLoader.getSystemClassLoader();
System.out.println("the appClassLoader : " + appClassLoader);

  

在不同的webapp里,classloader不一样,servlet对象也不一样。

通过这些知识也得出自己的webapp的类库放在自己webapp的lib库里比较合理,不要放到tomcat的类库中,classpath变量也慎用,classpath的值在catlinet.bat中会被初始化。

ClassLoader 双亲委派的更多相关文章

  1. java安全沙箱(一)之ClassLoader双亲委派机制

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

  2. ClassLoader&双亲委派&类初始化过程

    1.class sycle 类加载的生命周期:加载(Loading)–>验证(Verification)–>准备(Preparation)–>解析(Resolution)–>初 ...

  3. 【Java_基础】java类加载过程与双亲委派机制

    1.类的加载.连接和初始化 当程序使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三个步骤来对类进行初始化.如果没有意外,jvm将会连续完成这三个步骤,有时也把这三个步骤统称为 ...

  4. 【java基础】- java双亲委派机制

    在了解双亲委派机制之前,你应当知道classloader(如果不了解,可以现在去恶补一下哈) 四种classloader 虚拟机自带 引导类加载器(Bootstrap ClassLoader) 扩展类 ...

  5. java双亲委派模型

    Java类加载器(ClassLoader) 双亲委派模式要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器,请注意双亲委派模式中的父子关系并非通常所说的类继承关系,而是采用组合关系来 ...

  6. 创建自定义ClassLoader,绕过双亲委派

    1.什么是类加载 通过javac将.java文件编译成.class字节码文件后,则需要将.class加载到JVM中运行,哪么是谁将.class加载到JVM的呢?那就是类加载器啦. 2.类加载器类型 B ...

  7. JVM加载类的过程,双亲委派机制中的方法

    JVM加载类的过程: 1)JVM中类的整个生命周期: 加载=>验证=>准备=>解析=>初始化=>使用=>卸载  1.1.加载 类的加载阶段,主要是获取定义此类的二进 ...

  8. 深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题

    一.概述   定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型.类加载和连接的过程都是在运行期间完成的. 二. 类的 ...

  9. 关于Java类加载双亲委派机制的思考(附一道面试题)

    预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面 ...

  10. java双亲委派模型如何递归实现

    以下是Classloader的中最重要的方法,也就是所谓的双亲委派模型.这个模型第一次在周志明的书上看到,当时看了只知道是类加载过程是首先是委托给父加载器,否则父不能加载,则自己加载,整个过程实则是一 ...

随机推荐

  1. JS学习-async/await

    async/await 它保证函数的返回值为 promise. 用更少的.then()块来封装代码,同时它看起来很像同步代码 注意:可能会因为大量await的promises相继发生而变慢. asyn ...

  2. vue子组件为父组件属性写值

    父组件调用子组件代码(关键字sync): <importModel :visible.sync="dialogModelVisible"></importMode ...

  3. Jupyter + Miniconda + VsCode 学习利器

    Jupyter + Miniconda + VsCode 学习利器 Jupyter Notebook 是基于网页的用于交互计算的应用程序. Miniconda 是一款小巧的python环境管理工具 提 ...

  4. Godot从编辑器创建自定义场景类型对象

    Godot的编辑器提供了强大的所见即所得功能,并且,我们可以在不从源码编译的情况下,为编辑器提供新的节点类型. 首先,我们创建一个新场景,然后添加一个Node2D,然后为当前节点(Node2D)添加一 ...

  5. js字符串截取(获取指定字符后面的所有字符内容)

    function getCaption(obj, text){ let index = obj.lastIndexOf(text) + text.length-1; obj = obj.substri ...

  6. 实验: spring-boot 整合 fluent-mybatis 实验过程!!!!

    1.参考: 简单整合,会报错误 https://segmentfault.com/a/1190000040467885?utm_source=sf-similar-article 利用maven编译, ...

  7. c++基础代码练习考试必备(冒泡,求3*3矩阵对角线元素的积,求素数,密码验证)

    1.求1-100之间的素数 int j; int i; for (i=2; i <= 100; i++) { for (j=2; j <= i; j++) { if (i%j == 0) ...

  8. 牛客小白月赛65——D-牛牛取石子

    链接:https://ac.nowcoder.com/acm/contest/49888/D来源:牛客网 牛牛和牛妹在玩游戏,他们的游戏规则是这样的: 一共有两堆石子,第一堆有 aaa 个,第二堆有 ...

  9. session.timeout.ms、heartbeat.interval.ms、max.poll.interval.ms的含义及联系

    如果你使用消费者,那么一定会接触这几个参数: session.timeout.ms.heartbeat.interval.ms.max.poll.interval.ms,先让我们看看分别代表什么含义吧 ...

  10. openSUSE Tumbleweed 安装原生微信

    优麒麟网站上有![微信原生版](https://www.ubuntukylin.com/applications/106-cn.html)提供下载. 之前用 Ubuntu的时候,直接安装就可以使用. ...