栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

jvm实现(jvm组成)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jvm实现(jvm组成)

jvm执行简图:

类加载子系统

        作用:负责从文件系统或在网络中加载class文件,class文件开头有特定的标识
class loader只负责加载class文件,至于文件是否可以执行由Execution Engine(执行引擎:解释器、JIT、GC)决定。加载的类信息保存在方法区中,除了类信息外,方法区还会存放运行时常量池信息
        阶段:加载(引导类加载器、扩展类加载器、系统类加载器、自定义加载器)->链接(验证、准备、解析)->初始化

每个阶段的详细操作

        加载:
                1、通过类的全限定名获取定义此类的二进制字节流
                2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
                3、在内存中生成一个class对象(保存在堆中),作为方法区这个类的各种数据的访问入口
        链接:
                1、验证:
                        确保加载的class文件的字节流中包含的信息符合当前虚拟机的要求,保证加载类
                        的正确性,主要包括四种验证:文件格式验证、元数据验证、字节码验证、符合引
                        用验证。比如class文件头部的CA FE BA BE
                2、准备:
                        为类变量分配内存空间并且设置该类型变量的默认初始值(如int 赋值为0)
                        这里不包含使用final修饰的static,因为final在编译的时候就会分配,准备阶段会显
                        示的初始化(赋值具体的值)。不会为实例变量分配初始化,类变量会分配在方法
                        区中,而实例变量是随着对象一起分配到java堆中
                3、解析
                        将常量池内的符号引用转换为直接引用的过程事实上。
                        解析操作往往会伴随着JVM在执行完初始化之后再执行。
                        符号引用就是一组符号来描述所引用的目标符号引用的宇面量形式明确定义在
                        《java虛拟机规范》的Class文件格式中。直接引用就是直接指向目标的指针、相
                        对偏移量或一个间接定位到目标的句柄。
                        解析动作主要针对类或接口、字段、类方法、接口方法、方法类型等
        初始化:
                初始化阶段就是执行类构造器方法()的过程。
                此方法不需定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块
                中的语句合并而来。如果类中没有相应操作就不会生成clinit()方法。
                构造器方法中指令按语句在源文件中出现的顺序执行

                ()不同于类的构造器(关联:构造器是虚拟机视角下的
                若该类具有父类,JVM会保证子类的()执行前,父类的()己经执行完毕。
        ​​​​​​​        ​​​​​​​虚拟机必须保证一个类的()方法在多线程下被同步加锁。
​​​​​​​​​​​​​​

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/773189.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号