jvm
2020-12-27 17:43:34 0 举报
JVM描述
作者其他创作
大纲/内容
本地方法接口
根加载器(bootstrap)
本地方法栈
javac
静态区
执行本地方法
HelloWorld对象
存放在本地方法接口
常量池
调用本地方法接口
java命令
1、首先检查文件名和主类名是否一致2、逐行检查java文件的每一条语句的语法3、加载类信息(方法和变量等),为类信息标记一定大小的内存4、将java文件的字面常量和数值,加载分配一定大小的内存5、在这里“HelloWorld”会被标记为一个字面常量字符串对象,并在静态常量池中拥有一小块内存,这块内存会被标记了大小。6、生成“魔数”,用于标识该class文件能够被JVM加载7、生成jdk的版本号
PC程序计数器
...........
方法区
应用程序加载器或叫系统加载器(application)
PC程序计数器是一个一个的指令线程,这些线程执行着各种指令,比如加法,加法等指令
main栈帧
类信息存储区
Javac编译(编译期)
HelloWorld.java
1、当前读取完class文件之后,class首先进入的是应用程序类加载器。但是应用程序类加载器并不会马上解析class文件,而是将class文件转交给扩展类加载器,同理扩展类加载器,也不会立马解析class文件,而是将class文件提交给跟加载。
本地方法库
其他方法栈帧
2、当根加载器,接收到class文件之后,就检查class文件,查看全类名,该检查该全类名是否在jdk的lib目录下的某一个包中已经存在。如果存在,就将lib目录下的这个包下的class加载到JVM中;如果不存在,根加载器就将class文件重新返回给扩展加载器
双亲委派机制
3、扩展加载器,收到根加载器的信息之后,开始检查class文件,查看全类名,检查该全类名是否与扩展包下的某个包下已经存在。如果不存在,根加载器,就将Class文件重新返回给应用层加载器。让应用程序加载器,自行加载H并解析Helloworld.class文件
执行引擎
存放对象
虚拟机栈
当执行java命令的时候,类加载器会将javac生成的class文件读取,并进入类加载器。进入如加载器之后所做的事情如下:
javac结果
堆区
HelloWorld.class
编译期所做的事情
类加载器,在加载的过程中,将相应变量,对象,方法等,加载到JVM的相应的内存中
扩展加载器(extend)
收藏
0 条评论
下一页
为你推荐
查看更多