JVM处理兼容具体措施的分析

来源:互联网 发布:淘宝举证是什么意思 编辑:程序博客网 时间:2024/06/07 05:23

JVM是处理平台无关性的重要的基础,是解决平台差异性最主要的手段,在解决兼容性问题上,它采用了那些措施,原因是什么?


措施1:采用虚拟机执行引擎体系结构由自己实现,并不是基于实际的处理器、指令集和操作系统上

原因:基于自行定义的虚拟执行引擎可以做到封装底层多变的细节,保证统一的引擎外观。底层多别的细节封装有具体的JVM来处理。


措施2:在class字节码文件中,对文件中数据长度的定义采用虚拟单位Slot作为基准

原因:可以根据实际安装JVM的机器来确定每个虚拟单位的大小,延迟了确定class文件中数据在物理上的大小,保证了在没有确定物理大小之前可以基于虚拟单位Slot进行程序的编写,这个地方有设计思想当中依赖抽象的味道。


措施3:class文件与具体物理处理器、操作系统、指令集的映射进行统一的处理,保证JVM映射出class文件的内存模型是正确的

原因:JVM的主要任务有两个:一个是做兼容处理;二是做统一处理的class文件加载到JVM内存的处理流程。class文件的统一处理流程有:加载、验证、准备、解析、初始化、使用、卸载。加载、验证、准备、初始化、卸载这五个阶段是顺序确定的。因为在class文件存在引用其他class文件的情况,所以在解析、使用时可能会牵扯到没有加载过的class文件。这个统一的处理流程是JVM兼容处理的相互依存的一面。


对于仅想对JVM了解一些概况或者是简单了解一些具体的大略上的原理,到此处即可。


措施4:双亲委派模型是JVM的一个很重要的特点,可以很好的保证JVM对class文件的识别。但是在一些情况下是可以破坏这个模型的,这个到底是怎么回事?

原因:双亲委派模型是当一个classLoader收到加载类文件的任务是,它不会立即进行加载,而是先转给父类的classLoader,只有当父类的classLoader完不成加载任务的时候,子类的classLoader才会执行加载工作。具体例子是:一个JVM上可能要加载多个project,但是有的文件是可以共用的,有的不可以,于是就需要进行启动不同的classLoader,有的classLoader需要加载共用的,有的只能加载单独project使用的。Tomcat下部署project的文件结构可以详细的展示双亲委派模型。破坏双亲委派模型的有JNDI,JDBC等。