当前位置: 首页 > news >正文

免费网站收录近期重大新闻事件

免费网站收录,近期重大新闻事件,wordpress2019官方主题,自己网站做虚拟币违法吗一、双亲委派机制 在Java中如何使用代码的方式去主动加载一个类呢? 方式1:使用Class.forName方法,使用当前类的类加载器去加载指定的类。 方式2:获取到类加载器,通过类加载器的loadClass方法指定某个类加载器加载。 …

一、双亲委派机制

在Java中如何使用代码的方式去主动加载一个类呢?

方式1:使用Class.forName方法,使用当前类的类加载器去加载指定的类。
方式2:获取到类加载器,通过类加载器的loadClass方法指定某个类加载器加载。

双亲委派机制:自底向上查找是否加载过,再由顶向下进行加载
在类加载的过程中,每个类加载器都会先检查是否已经加载了该类,如果已经加载则直接返回,否则会将加载请求委派给父类加载器。如果类加载的parent为null,则会提交给启动类加载器处理。如果所有的父类加载器都无法加载该类,则由当前类加载器自己尝试加载。所以看上去是自顶向下尝试加载。第二次再去加载相同的类,仍然会向上进行委派,如果某个类加载器加载过就会直接返回。

面试题:类的双亲委派机制是什么?
当一个类加载器去加载某个类的时候,会自底向上向父类查找是否加载过,如果加载过就直接返回,如果一直到最顶层的类加载器都没有加载,再由顶向下进行加载

应用程序类加载器的父类加载器是扩展类加载器,扩展类加载器的父类加载器是启动类加载器

双亲委派机制的好处有两点:
1)避免恶意代码替换JDK中的核心类库,比如Java.lang.String,确保核心类库的完整性和安全性
2)避免类重复地被加载
在这里插入图片描述

Arthas中类加载器相关的功能:

类加载器的继承关系可以通过classloader –t 查看
在这里插入图片描述

如何打破双亲委派机制?

在这里插入图片描述

1. 打破双亲委派机制–自定义类加载器:tomcat

一个Tomcat程序中是可以运行多个Web应用的,如果这两个应用中出现了相同限定名的类,比如Servlet类,
Tomcat要保证这两个类都能加载并且它们应该是不同的类。如果不打破双亲委派机制,当应用类加载器加载Web应用1中的MyServlet之后,Web应用2中相同限定名的MyServlet类就无法被加载了。

Tomcat使用了自定义类加载器来实现应用之间类的隔离。每一个应用会有一个独立的类加载器加载对应的类。
在这里插入图片描述

下面2图为双亲委派机制的核心方法
在这里插入图片描述
在这里插入图片描述

自定义类加载器的父类是AppClassLoader

两个自定义类加载器加载相同限定名的类,不会冲突吗?
不会冲突,在同一个Java虚拟机中,只有相同类加载器+相同的类限定名才会被认为是同一个类。

在Arthas中使用sc –d 类名的方式查看具体的情况

2. 打破双亲委派机制-线程上下文类加载器:利用上下文类加载器加载类,比如JDBC和JNDI等

JDBC案例:JDBC中使用了DriverManager来管理项目中引入的不同数据库的驱动,比如mysql驱动、oracle驱动。下图
在这里插入图片描述
DriverManager类位于rt.jar包中,由启动类加载器加载。用户jar包中的驱动如依赖中的mysql驱动对应的类,由应用程序类加载器来加载。这就违反了双亲委派机制。
但DriverManager如何知道jar包中要加载的驱动在哪儿?
这里的DriverManage使用SPI机制(service-provider-interface),最终加载jar包中对应的驱动类。SPI中使用了线程上下文中保存的类加载器进行类的加载,这个类加载器一般是应用程序类加载器。
在这里插入图片描述

SPI机制:java菜鸟到大佬——全网最全SPI机制讲解 - 掘金
JDBC案例DriverManager管理用户类的加载的整体流程:

  1. 启动类加载器加载DriverManager。
  2. 在初始化DriverManager时,通过SPI机制加载jar包中的myql驱动。
  3. SPI中利用了线程上下文类加载器(应用程序类加载器)去加载用户类并创建对象。
    这种由启动类加载器加载的类,委派应用程序类加载器去加载类的方式,打破了双亲委派机制。
3. 打破双亲委派机制-OSGi模块化

历史上Osgi框架实现了一套新的类加载器机制,它存在同级之间的类加载器的委托加载。OSGi还使用类加载器实现了热部署的功能。热部署指的是在服务不停止的情况下,动态地更新字节码文件到内存中。
在这里插入图片描述

案例:使用阿里arthas不停机解决线上问题

背景:
小李的团队将代码上线之后,发现存在一个小bug,但是用户急着使用,如果重新打包再发布需要一个多小时的时间,所以希望能使用arthas尽快的将这个问题修复

思路:

  1. 在出问题的服务器上部署一个 arthas,并启动。
  2. jad --source-only 类全限定名 > 目录/文件名.java
    jad 命令反编译,然后可以用其它编译器,比如 vim 来修改源码
  3. mc –c 类加载器的hashcode 目录/文件名.java -d 输出目录
    mc 命令用来编译修改过的代码
  4. retransform class文件所在目录/xxx.class
    用 retransform 命令加载新的字节码

注意事项:
1、程序重启之后,字节码文件会恢复,除非将class文件放入jar包中进行更新。
2、使用retransform不能添加方法或者字段,也不能更新正在执行中的方法。

JDK8之后的类加载器

由于JDK9引入了module的概念,类加载器在设计上发生了很多变化。
1. 启动类加载器使用Java编写,位于jdk.internal.loader.ClassLoaders类中
Java中的BootClassLoader继承自BuiltinClassLoader实现从模块中找到要加载的字节码资源文件。
启动类加载器依然无法通过java代码获取到,返回的仍然是null,保持了统一。
2. 扩展类加载器被替换成了平台类加载器(Platform Class Loader)
平台类加载器遵循模块化方式加载字节码文件,所以继承关系从URLClassLoader变成了BuiltinClassLoader,BuiltinClassLoader实现了从模块中加载字节码文件。平台类加载器的存在更多的是为了与老版本的设计方案兼容,自身没有特殊的逻辑。

小结

1. 类加载器的作用是什么?

类加载器(ClassLoader)负责在类加载过程中的字节码获取并加载到内存这一部分。通过加载字节码数据放入内存转换成byte[],接下来调用虚拟机底层方法将byte[]转换成方法区和堆中的数据。

2. 有几种类加载器?
  1. 启动类加载器(Bootstrap ClassLoader)加载核心类
  2. 扩展类加载器(Extension ClassLoader)加载扩展类
  3. 应用程序类加载器(Application ClassLoader)加载应用classpath中的类
  4. 自定义类加载器,重写findClass方法。
    JDK9及之后扩展类加载器(Extension ClassLoader)变成了平台类加载器(Platform ClassLoader)
    在这里插入图片描述
3. 什么是双亲委派机制?

每个Java实现的类加载器中保存了一个成员变量叫“父”(Parent)类加载器。自底向上查找是否加载过,再由顶向下进行加载。避免了核心类被应用程序重写并覆盖的问题,提升了安全性。
在这里插入图片描述

4. 怎么打破双亲委派机制?
  1. 重写loadClass方法,不再实现双亲委派机制。
  2. JNDI、JDBC、JCE、JAXB和JBI等框架使用了SPI机制+线程上下文类加载器。
  3. OSGi实现了一整套类加载机制,允许同级类加载器之间互相调用。
http://www.yidumall.com/news/43883.html

相关文章:

  • 洞泾做网站关键词挖掘站网
  • html5 手机网站模板西安网站seo诊断
  • 建设公安网站的申请360推广官网
  • 微信公众平台官方网站海外引流推广平台
  • 动态网站开发基础体会百度旗下推广平台有哪些
  • 如何给公司做网站推广宣传今日重大新闻事件
  • 深圳网站建设-猴王网络网站功能
  • 青岛官网优化关键词排名优化是什么意思
  • 网站管理入口哪家竞价托管专业
  • 定西市建设网站费用百度关键词优化查询
  • 廊坊北京网站建设教师遭网课入侵直播录屏曝光广场舞
  • 邳州网站建设全球疫情最新数据消息
  • 网站积分解决方案网络营销是什么专业类别
  • 网站维护包括的内容泰州seo网络公司
  • 视觉做的比较好的国外网站什么都不懂能去干运营吗
  • 网站开发4k分辨率可口可乐软文范例
  • 网站空间没有续费线上推广渠道有哪些方式
  • wordpress代码添加图片aso优化注意什么
  • oem中国代加工网长沙seo搜索
  • 哪公司建设网站论坛seo网站
  • 减肥药 做网站营销企业网站开发公司
  • 诱导视频网站怎么做自己怎么免费做百度推广
  • 昆明网站定制开发各大网站收录入口
  • 怎么让别人找你做网站谷歌推广开户多少费用
  • html视频网站源码国内产女装一线二线品牌知乎
  • 查询网站备案时间html网站模板免费
  • 那个网站做二手车好免费html网站制作成品
  • 广州市做民宿什么网站比较好品牌推广专员
  • 织梦网站怎样做锚文本大连seo优化
  • 做网站的需求调研semiconductor是什么意思