码迷,mamicode.com
首页 > 其他好文 > 详细

类加载机制

时间:2020-01-04 01:35:52      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:执行   阶段   准备   strong   round   ssl   load   com   jdk   

类加载的三个阶段

加载
  jvm通过类加载器把java文件加载到内存中并生成一个class文件。
连接
  验证:class文件被加载进来之后,java虚拟机规范就会校验文件类容,来判断文件是否符合语法规范。
  准备:语法校验成功之后,就会给这个类、变量分配内存、赋予虚拟机初始值。
  解析:就是将符号引用转换为直接引用的过程。
初始化
  和准备阶段的赋值不一样,主要是程序对类的变量指定代码初始值,执行静态代码块。

类加载器种类

启动类加载器(Bootstarp ClassLoader)
负责加载JRE的核心类库,如JRE目标下的rt.jar, charsets.jar等

扩展类加载器(Extension ClassLoader)
负责加载JRE扩展目录ext中jar类包

系统类加载器(Application ClassLoader)
负责加载ClassPath路径下的类包

用户自定义加载器(User ClassLoader)
负责加载用户自定义路径下的类包

类加载机制

全盘负责委托机制
  当一个类加载器负责一个类的加载时,该类所依赖的和引用的其他类也将由该类加载器负责载入,除非显示声明。
双亲委派机制
  下图是类加载器的父子关系,首先会尝试让顶级父加载器加载,当父加载器无法加载的时候才一级一级往下分发,直到被加载成功为止。
双亲委派的优点
  1. 沙箱安全机制
  2. 避免类的重复加载
  比如jdk的java.lang包下有String类,如果我们在自己的程序里面也定义一个String类,这时候由于双亲委派机制,先让启动类加载器加载,此时jdk的String类就被加载成功了,而我们的String类由于和jdk的同名,将不会被系统类加载器加载。从安全上来看避免了有人恶意篡改系统代码。

技术图片

类加载机制

标签:执行   阶段   准备   strong   round   ssl   load   com   jdk   

原文地址:https://www.cnblogs.com/wlwl/p/11324387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!