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

建立公司微信平台 网站平台wordpress 淘口令

建立公司微信平台 网站平台,wordpress 淘口令,网站添加微信支付功能,长春个人做网站哪家好JVM中类的加载主要分为三个部分#xff0c;分别为加载#xff08;loading#xff09;#xff0c;链接#xff08;linking#xff09;#xff0c;初始化#xff08;initing#xff09;。其中加载负责的主要是讲类文件加载到内存中变为类对象#xff0c;不过此时只有基…JVM中类的加载主要分为三个部分分别为加载loading链接linking初始化initing。其中加载负责的主要是讲类文件加载到内存中变为类对象不过此时只有基本结构没有实际数据。链接阶段还会被细分为验证准备和解析其中验证时对字节码文件进行格式校验实际上所有阶段在执行前都会对自己需要的数据进行校验准备阶段则是对静态属性进行默认赋值以及类型校验而解析阶段则是这个环节最重要的主要是将加载阶段没有加载的结构进行加载这就相当于加载阶段是加载了一个和简单的骨架而链接阶段则是将剩余的骨架补齐。最终的初始化阶段则是最终的赋值为这具骨头附加血肉这三个阶段的具体实现如下 1. 加载loading JVM通过加载java服务的启动类来开启运行java服务任何非启动类的加载都是由另一个类的的的调用触发加载的。一个类调用另一个类的逻辑在编译后的字节码文件中的体现是符号引用当需要使用那个类时才会通过符号引用将其加载进内存中的。不过此时内存中保存的对象信息包括方法属性常量等等都只是符号引用并不是真实引用。 那么什么是符号引用呢具体我也不清楚但可以知道的是在没加载类或方法之前其是保存在字节码文件中而符号引用其中保存了可以找到目标类或方法的字节码文件的信息不仅仅是这个作用符号饮用记录了很多类或方法等其表示的东西的信息。 1.1 加载前的检查 JVM的类加载前需要进行大量的检查大致包括如下内容 判断是否已经加载过这类了如果出现类名相同内容不同的情况直接报错LinkageError。检查类文件格式是否正确可能会抛出ClassFormatError文件格式不正确和ClassFormatError版本不对的错误。检查找到的类文件和符号饮用的描述是否一致如果不是目标类则报错NoClassDefFoundError。加载其父类的符号引用如果父类是接口IncompatibleClassChangeError或自身ClassCircularityError则会报错。 一旦检查通过就会将当前类记录在其对应的类加载器中表示类已经加载过了。 类加载器见名知意就是讲类加载进内存的东西不过随着类的分布位置不同也需要不同的类加载器JVM内置了三种类加载器其中包括 引导类加载器Bootstrap ClassLoader这是 JVM 中最底层的类加载器负责加载 Java 核心库如 java.lang.*、java.util.* 等这些类位于 JDK 中的 jre/lib/rt.jar 或类似的系统路径下。它由 JVM 提供并且是不可见的无法直接实例化。扩展类加载器Extension ClassLoader负责加载 JDK 扩展库即 jre/lib/ext 目录下的类或者 java.ext.dirs 配置的路径下的类。它也是由 JVM 提供的但与引导类加载器不同它加载的是 Java 扩展库。应用类加载器Application ClassLoader负责加载用户应用程序的类路径classpath中的类通常就是你在命令行中通过 java -cp 或 java -classpath 指定的类路径。这是最常用的类加载器用于加载 Java 程序中定义的类。 但是创建这三个类加载器的目的是什么呢为什么不直接把类放在一起加载呢 首先这一定和性能无关因为我与其使用三种加载器不如将一种加载器复制三份。那么作用就一定是功能性的了大概率是为了解藕不同功能的类防止在一起互相影响引发不可预料的事件。 除了JVM内置的加载器外JVM还允许开发者自定义加载器这样就可以让开发者自己处理一些刁钻的类的位置比如在另一个服务器或数据库中的类等等。 1.2 类的加载过程 JVM类的加载过程大概可以将类分为两种一种是数组类一种是实例类也就是非数组类。 实例类 加载实例类时JVM会检查类是否加载过如果加载过则认为其已经在内存中跳过加载过程如果不在则将符号引用交给类加载器让其寻找并加载对应的类。 当类加载或解析失败时类加载器会抛出LinkageError或其子类的实例当第一次加载没有找到类的字节码文件时则会跑出LinkageError的子类ClassNotFoundException的实例。 同样的NoClassDefFoundError也是LinkageError的子类实例不同的是其通常是类在某个时刻加载过但后续没有找到。JVM规定两次查找相同的类必须返回同一类对象所以也可以说NoClassDefFoundError是在JVM的堆中没有找到类对象而ClassNotFoundException是在磁盘中没有找到类的字节码文件。 数组类 而对于数组类其没有二进制表示是由JVM拿到相应参数来创建的。JVM会优先检查数组类内部元素是否为引用类型如果是其类是否在之前加载过如果没有则会先加载器内部元素的类如果元素的类还包含其他的类则递归这一过程。最终在由JVM创建数组类。如果不是该数组类会被标记为引到类加载器加载的类防止下一次重复检查直接加载即可。 1.3 类的加载约束 假设两个类加载器加载了两个同名内容却不同的类由于JVM规定一个类只允许加载一次当一个类加载完成后另一个加载时会被当成已经加载过了那么在使用这类时就会出现类的实际行为与预期不一致的问题。 为了防止这种情况的发生JVM采用了一种名为类加载约束的方式。JVM要求加载类之前如果发现了同名的类必须保证其符号引用中记录的类格式一样符号饮用的另一个作用在编译期间生成的符号饮用会记录类的格式。如果不同则会返回LinkageError的错误。 实际上述情况还有另一种说明就是根本不会发生类加载前的格式检查而是同名类会直接拒绝加载使用内存中的如果与预期的类不一致则会直接抛出LinkageError的错误具体实现会在不同版本的JVM中有所差异不过归根到底都是遇到同类名不同内容时会返回错误。 2. 连接linking 连接分为三个阶段分别是验证准备以及解析 2.1 验证 在验证阶段JVM会对文件再次进行检查检查二进制文件字节码文件是否符合预期如果不符合则会抛出异常LinkageError或其子类。 2.2 准备 在准备阶段JVM会对加载类中的静态字段并赋予其默认值不是实际的值实际的值会在解析阶段使其赋值。并且还会对其实现或重写的接口或父类方法之前的类型进行对比检查这会导致接口和父类的提前加载。 2.3 解析 在类的加载阶段loading大量类的父类、字段、方法、接口等被作为符号引用存在常量池中。而在linking的解析阶段这些符号引用将被转换为真实引用并将方法和属性加载到方法区中。但是对于反射和动态方法这些无法在编译及加载期间确定其具体值的必须在实际执行时才能够进行符号引用到实际引用的变换操作。 JVM在解析阶段对方法和字段进行解析时如果当前类寻找不到则会在当前类的继承链或实现接口进行查找。如果还是没有找到则会抛出错误。 在当前被加载的类中未被使用的方法里保存的类会被作为符号引用存在常量池中不会被解析为实际引用。不过正在加载类的整个继承链和接口都会从子类的linking阶段的准备阶段开始初始化并且需要在子类初始化完成之前初始化完成。父类和接口虽然需要提前被初始化完成不过这也并不代表优先于子类初始化而是会卡在连接阶段只有在子类初始化时父类和接口等才会被递归初始化这些后面初始化阶段会说。 3. 初始化 由于JVM是多线程的并且规定类不能被加载多个所以又可能会出现多个线程使用一个类创建实例或递归请求初始化某个类或接口的情况。为了解决这个问题JVM使用了初始化锁来确保线程间初始化的安全。 在当前线程得到初始化锁后JVM会首先会初始化全部的常量和静态变量连接期间赋予的是默认值现在才会赋予真实值然后判断自己的父类是否已经初始化如果父类在之前使用过就是已经初始化的状态如果没有则开始对自己的父类或接口等进行递归初始化。 父类和初始化完毕后此时会开始执行静态代码块的代码从最高级的祖父类开始逐渐向下级执行因为子类的初始化完成依赖于父类和接口的初始化完成。静态代码一旦执行成功那么就代表整个初始化环节结束线程会释放初始化锁。 类初始化后所有的方法都已经实际存在于内存中此时还需要将本地代码也就是其他语言的代码和已经加载的方法进行绑定操作让本地方法能够正常调用。到此一个类的加载就完成了。
http://www.hkea.cn/news/14404523/

相关文章:

  • 做网站副业苏州广告公司排名前20
  • 湖南建设银行网站是多少钱企业门户首页
  • 网站建设 新手从晴天阴天雨天wordpress
  • 网站建设验收确认书建设大型网站需要什么硬件
  • 群辉做网站服务器配置网站开发语言开发
  • 网站建设图片qq群做网单哪个网站最好用
  • 怎么看网站是哪个公司做的做网站资料准备什么
  • wordpress建博客网站吗大连百度推广排名优化
  • 企业网站模板 下载企查查网页版
  • 上海外贸网站设计wordpress 图片链接
  • 在哪个网站找水利工地做网站开发的完整流程图
  • 黄骅贴吧二手房seo外链工具有用吗
  • 网站开发研究背景微信小程序制作需要什么基础
  • 郑州汉狮做网站好不惠州模板网站建设
  • 上海制作网站的公司个人简历范本
  • 南湖区建设街道办事处网站怎么查网站备案接入商
  • dede程序网站如何查看百度蜘蛛seo就业
  • 网站免费正能量软件直播帝国 网站搬家
  • 网站主题风格有哪些著名的wordpress主题
  • 无锡网站建设818gx如何做网站英文简历模板
  • 示范校建设网站网站开发的关键
  • 网站开发的前台开发工具在银行网站如何做理财风险评测
  • 创新优典网站建设天元建设集团有限公司财报
  • 密云住房和城乡建设部网站首页东莞网站制作十年乐云seo
  • 淄博做网站跟优化十堰做网站的工作室
  • 企业网站制作官网服务器部署php网站
  • 做网站可以用微软雅黑字体么扬中网站建设开发
  • 廊坊网站制作网站甘肃省建设厅网站
  • 网站的构建一般要多久南阳网站建设价格
  • 音乐网站建设论文的立题意义网站泛解析