• JVM类加载器


    JVM类加载分为:

    • 跟类加载器:Bootstrap类加载器,由c++编写,主要负责加载虚拟机核心类库的加载。
    • 扩展类加载器:主要是加载JAVA_HOME下面的jre/lb/ext子目录里面的类库,该加载器是由纯JAVA语言实现的,是跟类加载器的子加载器。
    • 系统类加载器:主要负责classpath下的类库资源加载,其父类加载器是扩展类加载器,它也是默认的自定义类加载器。
      双亲委托机制:一个类加载被loadclass调用之后,并不会将其直接加载,而是交给当前类加载器的父加载器加载,直到最顶层的类加载器,然后依次向下加载。
      双亲委托加载机制图
      破环双亲加载机制:
    • 有过web项目部署经验的人都知道,热部署是经常要用的,热部署的原理也就是使用自定义类加载器进行类卸载和重新加载(三大类加载器是无法卸载的)

    类加载起的命名空间、运行时包、类的卸载等等:

    • 类加载器命名空间:
      每一个类都有各自的命名,其在加载器中的同一个class是独一无二的。
    • 运行时包:
      我们对每一个类都指定一个包,在同一个类加载器中,class的命名是由包名加类名组成,这样也是保证每一个class在同一个类的独一无二的命名。
    • 初始类加载器:
      根据JVM规定,所有参与的类加载,即使没有亲自加载该类,也都会被标示为该类的初始化类加载器。
    • 类的卸载
      JVM规定只有满足下面三个条件才能被卸载(GC回收):
      • 该类的实例已经被GC
      • 加载该类的classloader被回收
      • 该类的class实例没有在其他地方被引用。
    • 总结:
      • JVM三大类加载,它们使用双亲加载机制。双亲加载机制是包含关系,并非被继承关系。
      • 希望能交流更多技术,关注小白的微信公众号吧。
        在这里插入图片描述
    小白技术社
  • 相关阅读:
    使用U盘做最官方纯净的高压缩级别的w10系统,享受急速5秒开机
    Nginx设置浏览器缓存
    --with-http_sub_module模块
    --with-http_random_index_module模块
    --with-http_stub_status_module模块
    Nginx常见问题
    secure_link_module模块
    nginx编译安装新模块
    使用Ubuntu搭建Web服务器
    [BJDCTF 2nd]假猪套天下第一
  • 原文地址:https://www.cnblogs.com/xbjss/p/13326681.html
Copyright © 2020-2023  润新知