类加载器

JVM类加载器

概念

“通过一个类的全限定名来获取描述此类的二进制字节流。” ——实现这个动作的代码模块称为类加载器。

加载阶段

  • 根据一个类的全限定名来获取定义此类的二进制字节流
  • 将这个字节流所代表的静态存储结构转化为 JVM 方法区中的运行时数据结构
  • 在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口。

扩展

  • 如果想维持双亲委派机制,则覆写findClass方法
  • 如果想打破双亲委派机制,则覆写loadClass方法

示例

Tomcat类加载器
  • Java类库的隔离:不同应用程序使用不同的类加载器,可以实现Java类库的隔离。

  • Java类库的共享:通过Common类加载器和Shared类加载器可以实现Java类库的共享。

  • 安全:服务器和应用程序有各自的类加载器加载Class文件。服务器的类库与应用程序的类库可以互相独立。

  • 支持HotSwap(热替换):JSP文件有独立的类加载器,服务器能通过替换JSP文件的类加载器来实现JSP的HotSwap功能。

Android类加载图

加载阶段

通过一个dex文件或者apk文件的路径完成类的加载

类加载器

  • BootClassLoader,主要用于加载系统的类,包括java和Android系统的类库
  • PathClassLoader,主要用于加载应用内中的类,路径是固定的,只能加载/data/app中的apk,无法指定dex路径
  • DexClassLoader,可任意加载.apk、zip或jar等,实现动态加载

TODO

类加载器相关应用,插件化、热补等

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容