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

网站怎么做seo优化wordpress页面内导航

网站怎么做seo优化,wordpress页面内导航,八年级信息上册如何做网站,wordpress 放大镜插件Java类的加载机制和双亲委派模型1类的加载机制类从被加载到虚拟机内存中开始#xff0c;到卸载出内存为止#xff0c;它的整个生命周期包括了#xff1a;加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和…Java类的加载机制和双亲委派模型1类的加载机制类从被加载到虚拟机内存中开始到卸载出内存为止它的整个生命周期包括了加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和卸载(Unloading)七个阶段。其中验证、准备和解析三个部分统称为连接(Linking)这七个阶段的发生顺序如下图所示如上图所示加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的类的加载过程必须按照这个顺序来按部就班地开始而解析阶段则不一定它在某些情况下可以在初始化阶段后再开始。类的生命周期的每一个阶段通常都是互相交叉混合式进行的通常会在一个阶段执行的过程中调用或激活另外一个阶段。1.1装载阶段在装载阶段虚拟机主要完成三件事1、通过一个类的全限定名来获取定义此类的二进制字节流。2、将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。3、在Java堆中生成一个代表这个类的java.lang.Class(HelloWorld.class)对象作为方法区域数据的访问入口1.2验证阶段验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范不会给JVM造成危害。如果验证失败就会抛出一个java.lang.VerifyError异常或其子类异常。验证过程分为四个阶段1、文件格式验证验证字节流文件是否符合Class文件格式的规范并且能被当前虚拟机正确的处理。2、元数据验证是对字节码描述的信息进行语义分析以保证其描述的信息符合Java语言的规范。3、字节码验证主要是进行数据流和控制流的分析保证被校验类的方法在运行时不会危害虚拟机。4、符号引用验证符号引用验证发生在虚拟机将符号引用转化为直接引用的时候这个转化动作将在解析阶段中发生。1.3准备准备阶段是正式为类变量分配内存并设置类变量(static修饰的变量)初始值的阶段这些内存都将在方法区中进行分配。注释1、这时候进行内存分配的仅包括类变量(static)而不包括实例变量实例变量会在对象实例化时随着对象一块分配在Java堆中。2、这里所设置的初始值通常情况下是数据类型默认的零值(如0、0L、null、false等)而不是被在Java代码中被显式地赋予的值。3、对已非final的变量JVM会将其设置成“零值”而不是其赋值语句的值pirvate static int size 12;那么在这个阶段size的值为0而不是12。 final修饰的类变量将会赋值成真实的值。1.4解析解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。符号引用符号引用以一组符号来描述所引用的目标符号引用可以是任何形式的字面量符号引用与虚拟机实现的内存布局无关引用的目标并不一定已经在内存中。直接引用直接引用可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。直接引用是与虚拟机实现的内存布局相关的同一个符号引用在不同的虚拟机实例上翻译出来的直接引用一般都不相同如果有了直接引用那引用的目标必定已经在内存中存在。1、类或接口的解析判断所要转化成的直接引用是对数组类型还是普通的对象类型的引用从而进行不同的解析。2、字段解析对字段进行解析时会先在本类中查找是否包含有简单名称和字段描述符都与目标相匹配的字段如果有则查找结束如果没有则会按照继承关系从上往下递归搜索该类所实现的各个接口和它们的父接口还没有则按照继承关系从上往下递归搜索其父类直至查找结束。3、类方法解析对类方法的解析与对字段解析的搜索步骤差不多只是多了判断该方法所处的是类还是接口的步骤而且对类方法的匹配搜索是先搜索父类再搜索接口。4、接口方法解析与类方法解析步骤类似只是接口不会有父类因此只递归向上搜索父接口就行了。1.5初始化类初始化阶段是类加载过程的最后一步前面的类加载过程中除了加载(Loading)阶段用户应用程序可以通过自定义类加载器参与之外其余动作完全由虚拟机主导和控制。到了初始化阶段才真正开始执行类中定义的Java程序代码。初始化阶段是执行类构造器()方法的过程。1、()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的编译器收集的顺序由语句在源文件中出现的顺序所决定。2、()方法与类的构造函数不同它不需要显式地调用父类构造器虚拟机会保证在子类的()方法执行之前父类的()方法已经执行完毕因此在虚拟机中第一个执行的()方法的类一定是java.lang.Object。3、由于父类的()方法先执行也就意味着父类中定义的静态语句块要优先于子类的变量赋值操作。4、()方法对于类或者接口来说并不是必需的如果一个类中没有静态语句块也没有对变量的赋值操作那么编译器可以不为这个类生成()方法。5、接口中可能会有变量赋值操作因此接口也会生成()方法。但是接口与类不同执行接口的()方法不需要先执行父接口的()方法。只有当父接口中定义的变量被使用时父接口才会被初始化。另外接口的实现类在初始化时也不会执行接口的()方法。6、虚拟机会保证一个类的()方法在多线程环境中被正确地加锁和同步。如果有多个线程去同时初始化一个类那么只会有一个线程去执行这个类的()方法其它线程都需要阻塞等待直到活动线程执行()方法完毕。如果在一个类的()方法中有耗时很长的操作那么就可能造成多个进程阻塞。1.6使用Class初始化过程完后就可以被任意调用。1.7卸载JVM中的Class只有满足以下三个条件才能被GC回收也就是该Class被卸载:1、该类所有的实例都已经被GC。2、加载该类的ClassLoader实例已经被GC。3、该类的java.lang.Class对象没有在任何地方被引用。1.8研究类加载的意义类加载是Java程序运行的第一步研究类的加载有助于了解JVM执行过程并指导开发者采取更有效的措施配合程序执行。研究类加载机制的第二个目的是让程序能动态的控制类加载比如热部署等提高程序的灵活性和适应性。1.9加载类的开放性类加载器(ClassLoader)是Java语言的一项创新也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中需要通过一个类的全限定名来获取定义此类的二进制字节流完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现的以便让应用程序自己决定如何获取所需的类。虚拟机规范并没有指明二进制字节流要从一个Class文件获取或者说根本没有指明从哪里获取、怎样获取。这种开放使得Java在很多领域得到充分运用例如1、从ZIP包中读取这很常见成为JAREARWAR格式的基础。2、从网络中获取最典型的应用就是Applet。3、运行时计算生成最典型的是动态代理技术在java.lang.reflect.Proxy中就是用了ProxyGenerator.generateProxyClass来为特定接口生成形式为“*$Proxy”的代理类的二进制字节流。4、有其他文件生成最典型的JSP应用由JSP文件生成对应的Class类。1.10类加载器与类的唯一性类加载器虽然只用于实现类的加载动作但是对于任意一个类都需要由加载它的类加载器和这个类本身共同确立其在Java虚拟机中的唯一性。通俗的说JVM中两个类是否“相等”首先就必须是同一个类加载器加载的否则即使这两个类来源于同一个Class文件被同一个虚拟机加载只要类加载器不同那么这两个类必定是不相等的。这里的“相等”包括代表类的Class对象的equals()方法、isAssignableFrom()方法、isInstance()方法的返回结果也包括使用instanceof关键字做对象所属关系判定等情况。2类加载的时机2.1主动引用一个类被主动引用之后会触发初始化过程(加载验证准备需再此之前开始)。1、遇到new、getstatic、putstatic或invokestatic这4条字节码指令时如果类没有进行过初始化则需要先触发其初始化。生成这4条指令最常见的Java代码场景是使用new关键字实例化对象时、读取或者设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)时、以及调用一个类的静态方法的时候。2、使用java.lang.reflect包的方法对类进行反射调用的时候如果类没有进行过初始化则需要先触发其初始化。3、当初始化一个类的时候如果发现其父类还没有进行过初始化则需要触发父类的初始化。4、当虚拟机启动时用户需要指定一个执行的主类(包含main()方法的类)虚拟机会先初始化这个类。5、当使用jdk7的动态语言支持时如果java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄并且这个方法句柄所对应的类没有进行过初始化则需要先触发器 初始化。(更多java动态类型语言资料http://www.infoq.com/cn/articles/jdk-dynamically-typed-language)2.2被动引用一个类如果是被动引用的话该类不会触发初始化过程。1、通过子类引用父类的静态字段不会导致子类初始化。对于静态字段只有直接定义该字段的类才会被初始化因此当我们通过子类来引用父类中定义的静态字段时只会触发父类的初始化而不会触发子类的初始化。2、通过数组定义来引用类不会触发此类的初始化。3、常量在编译阶段会存入调用类的常量池中本质上没有直接引用到定义常量的类因此不会触发定义常量的类的初始化。3双亲委派模型3.1从Java虚拟机的角度来说只存在两种不同的类加载器1、启动类加载器(Bootstrap ClassLoader)这个类加载器使用C语言实现(HotSpot虚拟机中)是虚拟机自身的一部分。2、所有其他的类加载器这些类加载器都有Java语言实现独立于虚拟机外部并且全部继承自java.lang.ClassLoader。3.2从开发者的角度类加载器可以细分为1、启动(Bootstrap)类加载器负责将 Java_Home/lib下面的类库加载到内存中(比如rt.jar)。由于引导类加载器涉及到虚拟机本地实现细节开发者无法直接获取到启动类加载器的引用所以不允许直接通过引用进行操作。2、标准扩展(Extension)类加载器是由 Sun 的 ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将Java_Home /lib/ext或者由系统变量 java.ext.dir指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。3、应用程序(Application)类加载器是由 Sun 的 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值因此一般称为系统(System)加载器。4、自定义(CustomClassLoader)类加载器应用程序根据自身需要自定义的ClassLoader如tomcat、jboss都会根据j2ee规范自行实现ClassLoader加载过程中会先检查类是否被已加载检查顺序是自底向上从Custom ClassLoader到BootStrap ClassLoader逐层检查只要某个classloader已加载就视为已加载此类保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下也就是由上层来逐层尝试加载此类。3.3双亲委派模型启动、标准扩展、应用程序和自定义类加载器它们之间的层次关系被称为类加载器的双亲委派模型。该模型要求除了顶层的启动类加载器外其余的类加载器都应该有自己的父类加载器而这种父子关系一般通过组合(Composition)关系来实现而不是通过继承(Inheritance)。3.4双亲委派模型的过程某个特定的类加载器在接到加载类的请求时首先将加载任务委托给父类加载器依次递归如果父类加载器可以完成类加载任务就成功返回只有父类加载器无法完成此加载任务时才自己去加载。使用双亲委派模型的好处在于Java类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object它存在在rt.jar中无论哪一个类加载器要加载这个类最终都是委派给处于模型最顶端的Bootstrap ClassLoader进行加载因此Object类在程序的各种类加载器环境中都是同一个类。相反如果没有双亲委派模型而是由各个类加载器自行加载的话如果用户编写了一个java.lang.Object的同名类并放在ClassPath中那系统中将会出现多个不同的Object类程序将混乱。因此如果开发者尝试编写一个与rt.jar类库中重名的Java类可以正常编译但是永远无法被加载运行。参考链接
http://wiki.neutronadmin.com/news/432493/

相关文章:

  • 做棋牌网站合法吗成都市网站制作
  • 厦门中国建设银行招聘信息网站门户网站的建立
  • 企业网站关键词网站建设开发公司
  • 上海住房城乡建设厅网站新乡建设网站
  • 网站抓取超时错误qq交流群如何使用
  • 网站备案 需要上传网站么浙江建设职业技术学院网站
  • win7 搭建iss网站高端网吧
  • 公墓网站建设空气过滤棉上海网站建设
  • 做二手房需要用到哪些网站搜集房源湘潭网站设计外包公司
  • 长治建立公司网站的步骤深圳百度seo培训
  • 怎么创建个人网站seo搜索引擎优化简历
  • 网站建设在开封找谁做网站推广费用一般多少钱
  • 东莞vi设计公司重庆网站建设 优化
  • 面对面视频 网站开发给前端做网站的图片叫什么
  • 做专业慢摇的网站四川省第十一公司
  • 网站建设 海拉尔一个空间放2个wordpress
  • 做游戏视频网站要批证吗王烨全国有多少人
  • 怎么做阿里巴巴英文网站大兴安岭网站建设兼职
  • 阜宁做网站找哪家好iis6 建设网站浏览
  • 制作一个购物网站需要多少钱网站方案策划书18000字
  • 中国建站公司网站注册商标属于哪一类
  • 民和县wap网站建设公司建筑设计找工作的网站
  • 海安做网站的公司外贸建站与推广如何做 google
  • 鲜花网站建设策划方案书wordpress如何生成单页的网站地图
  • 直播网站开发计划书重庆做网站有哪些
  • 江苏省交通厅门户网站建设管理招工在哪个平台最好
  • 花木网站源码做网站 人员
  • 一个好网站设计公司网站首页制作教程
  • 深圳手机网站制作价钱如何利用网站模板做网站
  • 凡科互动网站登录入口新手建设网站步骤