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

科技部网站支持湖南建设创新型省份安徽省住房城乡建设厅门户网站

科技部网站支持湖南建设创新型省份,安徽省住房城乡建设厅门户网站,找合伙做网站的,建站网站免费回顾一下类加载过程 类加载过程#xff1a;加载-连接-初始化。连接过程又可分为三步:验证-准备-解析。 一个非数组类的加载阶段#xff08;加载阶段获取类的二进制字节流的动作#xff09;是可控性最强的阶段#xff0c;这一步我们可以去完成还可以自定义…回顾一下类加载过程 类加载过程加载-连接-初始化。连接过程又可分为三步:验证-准备-解析。 一个非数组类的加载阶段加载阶段获取类的二进制字节流的动作是可控性最强的阶段这一步我们可以去完成还可以自定义类加载器去控制字节流的获取方式重写一个类加载器的 loadClass() 方法。数组类型不通过类加载器创建它由 Java 虚拟机直接创建。 所有的类都由类加载器加载加载的作用就是将 .class文件加载到内存。 类加载器总结 JVM 中内置了三个重要的 ClassLoader除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自java.lang.ClassLoader BootstrapClassLoader(启动类加载器) 最顶层的加载类由C实现负责加载 %JAVA_HOME%/lib目录下的jar包和类或者或被 -Xbootclasspath参数指定的路径中的所有类。ExtensionClassLoader(扩展类加载器) 主要负责加载目录 %JRE_HOME%/lib/ext 目录下的jar包和类或被 java.ext.dirs 系统变量所指定的路径下的jar包。AppClassLoader(应用程序类加载器) :面向我们用户的加载器负责加载当前应用classpath下的所有jar包和类。 双亲委派模型 双亲委派模型介绍 每一个类都有一个对应它的类加载器。系统中的 ClassLoder 在协同工作的时候会默认使用 双亲委派模型 。即在类加载的时候系统会首先判断当前类是否被加载过。已经被加载的类会直接返回否则才会尝试加载。加载的时候首先会把该请求委派该父类加载器的 loadClass() 处理因此所有的请求最终都应该传送到顶层的启动类加载器 BootstrapClassLoader 中。当父类加载器无法处理时才由自己来处理。当父类加载器为null时会使用启动类加载器 BootstrapClassLoader 作为父类加载器。 每个类加载都有一个父类加载器我们通过下面的程序来验证。 public class ClassLoaderDemo {public static void main(String[] args) {System.out.println(ClassLodarDemos ClassLoader is ClassLoaderDemo.class.getClassLoader());System.out.println(The Parent of ClassLodarDemos ClassLoader is ClassLoaderDemo.class.getClassLoader().getParent());System.out.println(The GrandParent of ClassLodarDemos ClassLoader is ClassLoaderDemo.class.getClassLoader().getParent().getParent());} }Output ClassLodarDemos ClassLoader is sun.misc.Launcher$AppClassLoader18b4aac2 The Parent of ClassLodarDemos ClassLoader is sun.misc.Launcher$ExtClassLoader1b6d3586 The GrandParent of ClassLodarDemos ClassLoader is nullAppClassLoader的父类加载器为ExtClassLoader ExtClassLoader的父类加载器为nullnull并不代表ExtClassLoader没有父类加载器而是 BootstrapClassLoader 。 其实这个双亲翻译的容易让别人误解我们一般理解的双亲都是父母这里的双亲更多地表达的是“父母这一辈”的人而已并不是说真的有一个 Mother ClassLoader 和一个 Father ClassLoader 。另外类加载器之间的“父子”关系也不是通过继承来体现的是由“优先级”来决定。官方API文档对这部分的描述如下: The Java platform uses a delegation model for loading classes. The basic idea is that every class loader has a “parent” class loader. When loading a class, a class loader first “delegates” the search for the class to its parent class loader before attempting to find the class itself. 双亲委派模型实现源码分析 双亲委派模型的实现代码非常简单逻辑非常清晰都集中在 java.lang.ClassLoader 的 loadClass() 中相关代码如下所示。 private final ClassLoader parent; protected Class? loadClass(String name, boolean resolve)throws ClassNotFoundException{synchronized (getClassLoadingLock(name)) {// 首先检查请求的类是否已经被加载过Class? c findLoadedClass(name);if (c null) {long t0 System.nanoTime();try {if (parent ! null) {//父加载器不为空调用父加载器loadClass()方法处理c parent.loadClass(name, false);} else {//父加载器为空使用启动类加载器 BootstrapClassLoader 加载c findBootstrapClassOrNull(name);}} catch (ClassNotFoundException e) {//抛出异常说明父类加载器无法完成加载请求}if (c null) {long t1 System.nanoTime();//自己尝试加载c findClass(name);// this is the defining class loader; record the statssun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);sun.misc.PerfCounter.getFindClasses().increment();}}if (resolve) {resolveClass(c);}return c;}}双亲委派模型的好处 双亲委派模型保证了Java程序的稳定运行可以避免类的重复加载JVM 区分不同类的方式不仅仅根据类名相同的类文件被不同的类加载器加载产生的是两个不同的类也保证了 Java 的核心 API 不被篡改。如果没有使用双亲委派模型而是每个类加载器加载自己的话就会出现一些问题比如我们编写一个称为 java.lang.Object 类的话那么程序运行的时候系统就会出现多个不同的 Object 类。 如果我们不想用双亲委派模型怎么办 自定义加载器的话需要继承 ClassLoader 。如果我们不想打破双亲委派模型就重写 ClassLoader 类中的 findClass() 方法即可无法被父类加载器加载的类最终会通过这个方法被加载。但是如果想打破双亲委派模型则需要重写 loadClass() 方法 自定义类加载器 除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自java.lang.ClassLoader。如果我们要自定义自己的类加载器很明显需要继承 ClassLoader。
http://www.huolong8.cn/news/216153/

相关文章:

  • 网站建设 服务质量保证设计大型网站建设
  • 专业做互联网招聘的网站utc wordpress
  • 网站建设方案如何讲解怎么进wordpress后台
  • 网站的公共头部怎么做网站制作公司 沈阳
  • 什么网站是用php做的浙江信息港查询三类证书
  • 移动端网站开发项目报告教学平台
  • asp网站怎么做山大优秀网站建设2018年度
  • 马云1688网站在濮阳如何做定制网络开发流程
  • 目前做定制产品的网站宁波网站关键词推广
  • 美容 网站源码网站域名到期怎么办
  • 购物网站模板免费下载营销推广计划书
  • 网页设计网站有哪些佛山网站提升排名
  • 做酒吧设计的网站苏州市亿韵商务信息有限公司
  • 网站建设空间多大wordpress角色名
  • 班级响应式网站html格式网站建设与管理的发展
  • 一个网站项目的价格表网站建设案例平台
  • 如何建立一个自己的网站?网站的内容管理
  • 电子商务网站设计的三大原则深圳官方网站制作
  • 做网站 做app好建站系统的选用分析
  • 怎么开网站手机网站开源
  • 济南做网站要多少钱邢台市政建设集团网站
  • 深圳聘请做网站人员搜索引擎优化方法总结
  • 建立网站建设考核激励制度网站设计就业怎么样
  • 怎么在网站里给图片做超链接携程网网站做的怎么样
  • 网站后台开发需求阿里云1核1g wordpress
  • 哪些网站可以上传自己做的视频网业版浏览器
  • 微信的微网站模板利用影视网站做cpa
  • 什么二手车网站做最好网站建设文书
  • 网站关键词快排名茌平网站建设道气钻
  • wordpress网站打不开贵阳58同城做网站公司