Java虚拟机 - JVM是什么?( 二 )


BEA公司,被oracle收购
任务控制能力出色,合并到Hotspot
J9
IBM研发
IBM内部使用,往往需要和IBM套件共同使用
Harmony
IBM和Intel研发的,捐给Apache作为孵化项目
Apache退出了JCP之后,慢慢的就没有什么商用了
 
注:接下来讲的是Hotspot虚拟机,但虚拟机基本差不多,但JRockit是没有解释器的,这些区别自己去了解 。
 
探索JVM内部 

Java虚拟机 - JVM是什么?

文章插图
 

Java虚拟机 - JVM是什么?

文章插图
 
编译器 
为什么要有编译器?
 
那么我们先来假设下没有编译器的情况吧
 
如果没有编译器,我们现在编写一个程序,这个程序是在windows上编写的,开发人员的本地测试也是在windows进行测试的,但环境部署上去的机器是Liunx时,这个时候两个操作系统的机制以及执行的字节码可能不一样,如( / )在Liunx和windows的表示都是不一样的,所以这种差别是使得开发人员很痛苦,难道每一次部署的系统环境不一样时或开发的系统环境不一样的时候就要写不同的代码吗?
 
而编译器的作为就是将开发人员写的代码编译成为一份是由JVM专门识别的一个字节码,直接由JVM进行运行,不在与操作系统有关 。
 
是什么?
 
将开发人员写的*.java的源代码编译成字节码(*.class),这种字节码也可以叫做JVM的机器语言
【Java虚拟机 - JVM是什么?】 
执行过程
Java虚拟机 - JVM是什么?

文章插图
 

Java虚拟机 - JVM是什么?

文章插图
 
符号表:就是由符号地址和符号的信息所组成的表格,符号表其实就是记录编译的时候读取的信息 。
 
词法分析:源代码的字符流,转换为标记的集合(字段标记,方法的标记等),并检查词法是否是正确的 。
 
语法分析:是将词法分析后的这个标记的集合转换为一个树状结构的表现形式,并检查语法等是否是正确的 。
 
注解处理:就是处理语法分析之后的这个树状结构的内容,注解处理时是可以对内容进行增删改查的,如果对这个语法分析后的树状结构数据进行更改了,那么编译器将回到解析和填充符号表的过程中重新处理 。比如:标识这个值是a和b的变量相加得来的,大家去看看*.class文件的内容就知道了
 
语义分析:对语法分析之后的这个树状结构进行读取,并且对其上下文的联系是否合理进行上下文的分析,类型是否匹配、方法是否有返回值、将判断泛型等编译成简单的语法结构等……
 
字节码生成:将各个步骤的所产生的信息及存储在符号表内的信息进行转换为字节码,写出为*.class文件 。
 
如:现在商家想要得到垃圾袋,要去管理者那申请,先填写申请单,管理者要制作这些申请单,管理者会先记下大概要填写的几个模块(词法分析),在各个模块中将要填写的内容写上去,在形成一个树状化的展示形式申请单(基本信息– 名字)(语法分析),对一些要填写的地方进行注解(注解处理),这个时候申请单就做好了,给到各个商家,商家填写完成后,要检查商家填写的内容是否有错误(语义分析),最后没有问题了,那么根据申请单信息进行审核,审核通过了则给袋子给商家 。
 
*.class文件内容: 
结构信息:文件版本号、各个部分数量、大小等信息 。
 
元数据:常量的信息、继承的类、实现的接口、声明的信息、常量池等信息 。
 
方法信息:语句和表达式对应信息,字节码、异常处理表、求值栈和局部变量的大小,求值栈的类型记录等信息
 
类装载系统 
为什么要有类装载机制?
 
类加载系统-图一
Java虚拟机 - JVM是什么?

文章插图
 

Java虚拟机 - JVM是什么?

文章插图
 
 
 
类加载系统-图二
Java虚拟机 - JVM是什么?

文章插图
 

Java虚拟机 - JVM是什么?


推荐阅读