• 类加载器


      1)默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap CLassloder , Extension CLassloder , SystemAppClass CLassloder(Application ClassLoader)

      2)不同的类加载器加载出来的类是不一样的,不同的类加载器加载同一个类会在方法区产生两个不同的类,彼此不可见,并且在堆中生成不同的Class实例。对于接口,其实就是一个特殊的类,和类一样,在堆中产生不同的class对象。
      3)类装载器需要保证类装载过程的线程安全,因为类只加载一次。
      4)ClassLoader的父子结构中,默认装载采用了父优先(并不是真的像java中继承的关系,而是组合的关系,即在"子类"中存在一个成员变量指向"父类"的引用。(高)Bootstrap ClassLoader->Extension ClassLoader->Application ClassLoader(低))
      5)双亲委托模型的简单理解:一般对于我们java程序员来说,类的加载使用的是双亲委派模型,即当一个类需要加载时,会将类传给ApplicationClassLoader,但是ApplicationClassLoader并不会加载,不管它是否能加载,而是传给它的"父类"ExtensionClassLoader,Extension ClassLoader同样不会加载,同样传给 Bootstrap ClassLoader(注意不是我们常说的那种父类,但是可以这样理解),这时Bootstrap ClassLoader会判断它是否能加载,能加载就直接加载了,不能加载就传给ExtensionClassLoader,ExtensionClassLoader同样的判断是否能加载,能加载就直接加载,不能加载就传给ApplicationClassLoader,然后ApplicationClassLoader也判断能否加载,如果还是不能加载应该就是报ClassNotFoundException了。

  • 相关阅读:
    terminal
    变量提升、函数提升
    ssh传输文件
    mocha测试框架
    npm-run 自动化
    webpack
    浅析babel
    构建工具gulp
    C++中TRACE宏及assert()函数的使用
    memcpy函数-C语言
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/12028629.html
Copyright © 2020-2023  润新知