我们编写的java文件在由编译器编译后会生成对应的class字节码文件,然后再将class字节码文件转给JVM。JVM会处理解析class文件,将其内部设置的类、方法、常量等信息全部提取出来,然后找到main方法开始一步一步编译成机器码并执行,中间会根据需要调用前面提取的数据。
java文件为什么不用JVM直接编译?这样效率不是更高么?
首先要知道java之所以强大,原因之一就是JVM的强大。强大之一是JVM是"跨平台"的。无论在哪种操作系统上执行,都可以转成对应的机器语言,不需要担心适配问题。第二点就是JVM是"跨语言"的,因为JVM只认class文件,所以其他语言只需要一个编译器编译成class文件就可以使用JVM来编译执行了。
JVM组件分析
根据上面的说明可以知道java程序执行的核心是通过JVM来实现的,那么就需要知道JVM内部是如何执行的。JVM内部可以分为四大部分,运行时数据区域、类加载系统、执行引擎、本地接口和本地方法库。
类加载系统:主要就是指类加载器,用于把class数据文件加载到运行时数据区域,然后由数据区域来编译执行。
运行数据区域:搭配执行引擎来编译传来的文件中的代码,然后执行,并且根据需要通过本地方法接口调用本地方法。
执行引擎:主要用于代码的编译和运行时对象的回收。
本地库接口和本地方法库:提供一些java无法实现,需要底层执行调用的方法,是jvm访问底层的重要途径。
申请免费试听
只要一个电话
我们为您免费回电