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

计算机编程网课无锡seo公司找哪家好

计算机编程网课,无锡seo公司找哪家好,帮别人做买家秀的网站,有后台的网站如何建设JVM只会运行二进制文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。 1. 类加载器的种类 启动类加载器(BootStrap ClassLoader):加载JAVA_HOME/jre/lib目录下的库扩展类加载器&#xff…

JVM只会运行二进制文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。

1. 类加载器的种类

  • 启动类加载器(BootStrap ClassLoader):加载JAVA_HOME/jre/lib目录下的库
  • 扩展类加载器(ExtClassLoader):主要加载JAVA_HOME/jre/lib/ext目录中的类
  • 应用类加载器(AppClassLoader):用于加载classPath下的类
  • 自定义类加载器(CustomizeClassLoader):自定义类继承ClassLoader,实现自定义类加载规则。
    在这里插入图片描述

2. 双亲委派模型

2.1 原理

加载某一个类,先委托上一级的加载器进行加载,如果上级加载器也有上级,则会继续向上委托,如果该类委托上级没有被加载,子加载器尝试加载该类

  • student类在应用类加载器,向上委托,但lib和ext目录都没有student,所以向下由含有student类的子加载器(应用类加载器)加载student类
  • string类在应用类加载器,向上委托,lib目录下有,于是加载string类然后返回给应用类加载器让它直接使用
    在这里插入图片描述

2.2 使用场景

JVM为什么采用双亲委派机制?

  1. 通过双亲委派机制可以避免某一个类被重复加载,当父类已经加载后则无需重复加载,保证唯一性
  2. 为了安全,保证类库API不会被修改
    ex:
package java.long;
public class String{public static void main (Stringll args) {System.out.println("demo info");}
}

此时执行main函数,会出现异常,在类java.lang.String 中找不到 main 方法

错误:在类 java.Lang.string 中找不到 main 方法,请将 main 方法定义为:
public static void main(String[] args)
否则 JavaFX 应用程序类必须扩展
javafx.application.Application

报错原因:由于是双亲委派的机制,javalang.String的在启动类加载器得到加载,因为在核心jre库中有其相同名字的类文件,但该类中并没有main方法。这样就能防止恶意篡改核心API库。(所以这就是为什么类名不能是关键字的根本原因)

3. 类装载的执行过程

  • 类从加载到虚拟机中开始,直到卸载 止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。
  • 其中,验证、准备和解析这三个部分统称为连接(linking)
    在这里插入图片描述

3.1 加载阶段

查找和导入class文件

  • 通过类的全名,获取类的二进制数据流。
  • 解析类的二进制数据流为方法区内的数据结构(Java类模型)
  • 创建java.lang.Class类的实例,表示该类型。作为方法区这个类的各种数据的访问入口
    在这里插入图片描述

3.2 连接阶段

3.2.1 验证阶段

保证加载类的准确性
验证类是否符合JVM规范,安全性检查

  • 格式检查,如:文件格式是否错误、语法是否错误、字节码是否合规(1)(2)(3)
    1. 文件格式验证
    2. 元数据验证
    3. 字节码验证
  • Class文件在其常量池会通过字符串记录自己将要使用的其他类或者方法,检查它们是否存在(4)
    4. 符号引用验证
    在这里插入图片描述

3.2.2 准备阶段

内类变量分配内存并设置类变量初始值

  1. static变量,分配空间在准备阶段完成(设置默认值),赋值在初始化阶段完成
  2. static变量是final的基本类型,以及字符串常量,值已确定,赋值在准备阶段完成
  3. static变量是final的引用类型,那么赋值也会在初始化阶段完成
public class Application {static int b = 10;      //(1)static final int c = 20;   //(2)static final String d = "hello";   //(2)static final Object obj = new Object;  //(3)

3.2.3 解析阶段

把类中的符号引用转换为直接引用
比如:方法中调用了其他方法,方法名可以理解为符号引用,而直接引用就是使用指针直接指向方法

  • 符号引用:代#的是符号引用,符号引用可能也引用其他符号引用或直接引用类
  • 直接引用:找到符号指的类与方法去执行
    在这里插入图片描述

在这里插入图片描述

3.3 初始化阶段

对类的静态变量,静态代码块执行初始化操作

  • 如果初始化一个类的时候,其父类尚未初始化,则优先初始化其父类。
  • 如果同时包含多个静态变量和静态代码块,则按照自上而下的顺序依次执行。
//Animal是Cat父类
//子类初始化,如果父类还没初始化,会引发父类先初始化
System.out.println(Cat.sex);
//子类访问父类静态变量,只触发父类初始化
System.out.println(Cat.num);

3.4 使用阶段

JVM 开始从入口方法开始执行用户的程序代码

  • 调用静态类成员信息(比如:静态字段、静态方法)
  • 使用new关键字为其创建对象实例

3.5 卸载阶段

当用户程序代码执行完毕后,JVM便开始销毁创建的Class对象。

http://www.dtcms.com/wzjs/433947.html

相关文章:

  • 虫虫管理wordpress软件西安网站关键词优化推荐
  • 代理公司代办网站优化技巧
  • 电商网站成本阿里云免费域名
  • 娱乐网站开发百度账号注册
  • 做网赌网站需要多少钱市场营销策划方案案例
  • 能免费建网站吗俄罗斯搜索引擎
  • 沈阳网站建设活动方案站长工具查询域名信息
  • 做网站 图片 文件夹 放哪儿网站查询信息
  • 什么语言做网站简单网络游戏推广员是做什么的
  • 网站空间 域名百度热搜榜在哪里看
  • 腾讯云网站备案不能用阿里云全国疫情突然又严重了
  • 淘宝代购网站开发网站开发建站
  • 从seo角度做网站流量网络广告营销的典型案例
  • 国外做机械设计任务的网站广州营销网站建设靠谱
  • 网站开发需要学shenme站优化
  • 个人网站怎么做微商网站联盟广告
  • 口红做网站多少钱天津网络推广seo
  • 网络推广和网站推广的关系重庆白云seo整站优化
  • 中国建设布网站软件开发公司网站
  • 共享网站的详细规划郑州关键词优化费用
  • 毕业设计做一个网站怎么做百度引擎搜索入口
  • b2c外贸营销网站建设手机网站制作
  • 展示型网站有哪些北京seo优化哪家好
  • 西安个人网站建设小说榜单首页百度搜索风云榜
  • 四川通管局网站网页设计模板免费网站
  • 有网站源程序怎么做网站后台上海搜索优化推广
  • 网站优化公司哪家便宜360搜索网址是多少
  • 上海建设项目中标公示网站天津网站排名提升多少钱
  • 广州网站设计哪里找引擎优化seo
  • 网址的输入格式是什么样的福建seo优化