Talk about all aspects of Java class loading

Linghu Yizhuo 2021-01-22 14:02:41
talk aspects java class loading


What is a class loader

Class loader is a module that loads the description of a class into the memory of a virtual machine ; A typical description of a class is java Source compiled class file , It can also be any other form of data , For example, network byte stream and so on ;

What are the class loaders

java Three types of loaders are defined by default :

  • Start class loader (Bootstrap Class-Loade) Main load jre/lib Below jar package
  • Extend the classloader (Extension or Ext Class-Loader) Main load jre/lib/ext/ In the catalog jar package ;(jre/lib/ext/ The directory can be accessed through the specified java.ext.dirs Cover )
  • Apply the class loader (Application or App Class-Loader), load classpath The content of (classPath It's a set of directories ).

Application class loaders can be “ Cover ” Of , adopt -Djava.system.class.loader=com.yourcorp.YourClassLoader The whole parameter to cover the original application class loader ; The cover here is double quoted , In fact, the custom class loader will be called the father of the default application class loader ;

This is usually done when you need to change the parental delegation model ; About the parental delegation model , See below ;

The parent delegation model of classloader

What is the parent delegate model

When a class loader (Class-Loader) When trying to load a type , Unless the parent loader cannot find the corresponding type , Otherwise, try to delegate this task to the parent loader of the current loader . The purpose of using the delegation model is to avoid repeated loading Java type

Why use the parental delegation model

There are two main reasons for adopting the parental delegation model :

  1. Guarantee the uniqueness of a class , A class is only loaded once , Avoid repeated loading ;( Because in JVM In the specification , The same class The file is loaded by two identical classes , Will be treated as two classes )
  2. Security , Guarantee java The core API No replacement ; That is, the class loaded by the bootloader will not be covered by other class loaders ;

What broke the parental delegation model , Why break

  • JNDI service
  • Tomcat The server
  • OSGI Achieve hot update

The reason why the above scenario breaks the parental delegation model is that the parent class does not have the ability to load or complete the required logic , In order to make the overall architecture design more elegant 、 flexible , It's loaded by the subclass loader ;

The process of class loading

Class loading is mainly divided into three processes , load 、 link 、 initialization ;

load :Java Read bytecode data from different data sources to JVM in , And map it to JVM Approved data structures (Class object )

link : This is the core step , In short, the original class definition information is smoothly transformed into JVM In the process of operation . It is subdivided into verification 、 Get ready 、 Analyze the three processes ;

  • verification : verification Class Whether the object conforms to the virtual machine specification
  • Get ready : Create static variables and prepare memory space
  • analysis : Change the symbolic reference in the constant pool to a direct reference

initialization : The initialization logic of the execution class , Including static field assignments , Static block initialization, etc ; The initialization of the parent type takes precedence over the initialization of the current type .

What are the application scenarios of the custom class loader

  • Modify the bytecode logic of the class , such as : Weave universal logic for external classes ;``
  • According to the needs of users , Create classes dynamically ; such as :JDBC Driver class , Different databases need different driver classes
  • Package name + When class names conflict , A class loader cannot load at the same time , It can be loaded into memory with different class loaders ;
  • Thermal renewal characteristics , Through custom class loader , Realize dynamic loading in the running process 、 Unload class

Implementation of custom class loader

The main core is to get the bytecode phase of the class , For mapping bytecode to Class object , This part generally does not involve ;

public class CustomClassLoader extends ClassLoader {
@Override
public Class findClass(String name) throws ClassNotFoundException {
byte[] b = loadClassFromFile(name); // Here's the core logic
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassFromFile(String fileName) {
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(
fileName.replace('.', File.separatorChar) + ".class");
byte[] buffer;
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
int nextValue = 0;
try {
while ( (nextValue = inputStream.read()) != -1 ) {
byteStream.write(nextValue);
}
} catch (IOException e) {
e.printStackTrace();
}
buffer = byteStream.toByteArray();
return buffer;
}
}

Summary

Today I share with you java The following knowledge about class loaders :

  1. What is a class loader
  2. What are the specific class loaders
  3. Parent delegation model in class loading process
  4. The specific process of class loading
  5. Application scenarios of custom class loader
  6. Implementation of class loader

Zero base learning Java Programming , You can join me for ten years Java Learning garden , Technical communication , Resource sharing , Answer questions and solve doubts , Summary of development experience .

版权声明
本文为[Linghu Yizhuo]所创,转载请带上原文链接,感谢
https://javamana.com/2021/01/20210122140206427x.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云