当前位置:首页 > 技术文章 > 正文内容

Java中的类加载 && 双亲委派

类加载是Java虚拟机(JVM)将类的字节码文件(.class)加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被JVM直接使用的Java类型的过程。

类加载的过程

类加载过程主要分为以下三个阶段:

  1. 加载(Loading)
  • 通过类的全限定名获取定义此类的二进制字节流
  • 将字节流所代表的静态存储结构转换为方法区的运行时数据结构
  • 在内存中生成一个代表该类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
  1. 链接(Linking)
  • 验证(Verification):确保加载的类信息符合JVM规范,没有安全方面的问题
  • 准备(Preparation):为类变量(static变量)分配内存并设置默认初始值
  • 解析(Resolution):将常量池内的符号引用转换为直接引用
  1. 初始化(Initialization)
  • 执行类构造器<clinit>()方法的过程
  • 该方法由编译器自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生

类加载器(ClassLoader)

Java中的类加载器采用双亲委派模型(Parents Delegation Model),主要有以下几种:

  1. Bootstrap ClassLoader(启动类加载器)

最顶层的加载器,由C++实现,负责加载<JAVA_HOME>\lib目录下的核心类库

  1. Extension ClassLoader(扩展类加载器)

负责加载<JAVA_HOME>\lib\ext目录下的类库

  1. Application ClassLoader(应用程序类加载器)

也称为系统类加载器,负责加载用户类路径(ClassPath)上的类库

  1. 自定义类加载器

用户可以通过继承java.lang.ClassLoader实现自己的类加载器

双亲委派模型

工作流程:

  1. 当一个类加载器收到类加载请求时,首先不会自己尝试加载,而是委派给父类加载器
  2. 只有当父类加载器反馈无法完成加载请求时,子加载器才会尝试自己加载

优点:

  • 避免类的重复加载
  • 保证Java核心API的安全性和稳定性

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/4247.html

分享给朋友:

“Java中的类加载 &amp;&amp; 双亲委派” 的相关文章

修改配置nginx限制无良爬虫频率

我们公司某些服务也经常被爬虫影响,例如贴吧在贴吧这个事故中,我是简单地匹配useragent,给它返回一个500的错误。今天看微博发现@金荣叶 的处理方法很灵活,可以动态设定一个爬虫的频率,达到减轻服务器负载,并且不至于封杀爬虫。#全局配置limit_req_zone $anti_spider zo...

Nginx如何实现四层负载均衡

静态负载均衡Nginx的四层静态负载均衡需要启用ngx_stream_core_module模块,默认情况下,ngx_stream_core_module是没有启用的,需要在安装Nginx时,添加--with-stream配置参数启用,如下所示。./configure --prefix=/usr/l...

压测nginx出现的问题分析

压测nginx出现no live upstreams while connecting to upstream的问题分析基础环境版本信息Centos 7.1nginx version: openresty/1.13.6.2nginx配置信息stream {   ...

终于有人把Docker讲清楚了,Docker入门教程,原来这么简单...

Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖到一个可移植的容器中,然后发布到任何流行的机器上。Docker的迅猛发展和全新理念,席卷了整个IT界,成为云时代的一颗新星。Docker的优势Docker相比于传统虚拟化方式具有更多的优势:docker启动快速...

09《Nginx 入门教程》Nginx 的 Http 模块介绍(下)

本小节,我们将主要介绍 Nginx 中 Http 请求 11 个阶段中的最后几个重要的阶段以及相关的模块,并演示其用法。1. try_files 阶段这个阶段又称为 precontent 阶段,是 content 阶段的前置处理阶段,该阶段主要介入的模块是 ngx_http_try_files_mo...

开源|维易CMDB详解之安装部署及常见问题处理(转载37丫37)

本文内容转载自大佬37丫37的运维咖啡吧,有兴趣的朋友可以关注一下他!之前介绍过一个灵活多变功能强大的开源CMDB系统,设计精巧,可玩性高,经过一段时间的深度使用,发现了许多可取之处,无论是构建系统内部的资产管理数据库,还是学习它的设计方式都有不少的可取之处,接下来我准备写一系列的文章来系统的介绍一...