您的位置:网站首页 > Java游戏 > 正文

好程序员Java分享JVM类加载机制

类别:Java游戏 日期:2019-7-8 10:12:38 人气: 来源:

  张静初奉子成婚jdk(Java Development Kit)Java开发包,是Java开发人员用于编译和调试程序的一套程序的集合。

  jre(Java Runtime Evironment)Java运行时,是运行Java程序的平台,所有的Java程序必须在这个平台中才能执行。

  jvm(Java Virtual Machine)Java虚拟机,是用代码虚拟出来的计算机,模拟执行计算机的各项功能,它有自己的硬件架构,如:处理器、堆栈、寄存器等,还有自己的一套指令系统,在不同的操作系统上都可以安装JVM,从而实现Java程序在不同的操作系统上都能执行,JVM就是为实现Java的跨平台特性。

  我们执行Java程序开发出来后,需要先编译再执行,JVM就负责加载类的过程。br

  根据类的全名限定符,获取class二进制流,这个流可以从磁盘上的class、jar文件获得,也可以从网络中获得。

  加载类完成后,就进入了验证过程,这个过程了前面生成的Class对象中的信息,不会危害JVM的安全。br

  文件格式验证,是要验证字节流是否符合Class文件格式的规范,并且能被当前版本的虚拟机处理。如验证魔数是否0xCAFEBABE;主、次版本号是否正在当前虚拟机处理范围之内;常量池的常量中是否有不被支持的常量类型等等,该验证阶段的主要目的是输入的字节流能正确地解析并存储于方法区中,经过这个阶段的验证后,字节流才会进入内存的方法区中存储,所以后面的三个验证阶段都是基于方法区的存储结构进行的。

  元数据验证,是对字节码描述的信息进行语义分析,以其描述的信息符合Java语言规范的要求。可能包括的验证如:这个类是否有父类;这个类的父类是否继承了不允许被继承的类;如果这个类不是抽象类,是否实现了其父类或接口中要求实现的所有方法。

  字节码验证,主要工作是进行数据流和控制流分析,被校验类的方法在运行时不会做出危害虚拟机安全的行为。如果一个类方法体的字节码没有通过字节码验证,那肯定是有问题的;但如果一个方法体通过了字节码验证,也不能说明其一定就是安全的。

  符号引用验证,发生在虚拟机将符号引用为直接引用的时候,这个动作将在“解析阶段”中发生。验证符号引用中通过字符串描述的权限定名是否能找到对应的类;在指定类中是否存在符合方法字段的描述符及简单名称所描述的方法和字段;符号引用中的类、字段和方法的访问性(private、protected、public、deult)是否可被当前类访问。

  符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧定位到目标即可。符号引用与虚拟机实现的内存布局无关,引用的目标并不一定已经加载到内存中。

  直接引用可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。直接引用是与虚拟机实现的内存布局相关的,如果有了直接引用,那么引用的目标必定已经在内存中存在。

  类初始化是类加载过程的最后一步,前面的类加载过程,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制。到了初始化阶段,才真正开始执行类中定义的Java程序代码。br

  初始化阶段是执行类构造器clinit()方法的过程。clinit()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的。

  JVM是代码模拟的计算机,有自己的硬件和软件,JVM能实现Java类的加载和运行,具体加载过程有:加载、验证、准备、解析、初始化5个步骤组成。返回搜狐,查看更多

  

关键词:java所有类
0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

郑重声明:本站资源来源网络 如果侵犯了你的利益请联系站长删除

CopyRight 2010-2012 技术支持 FXT All Rights Reserved