关于JVM的地位问题~
JDK\JRE\JVM的关系
JDK(开发工具包)包含JRE(运行环境),JRE包含JVM(JAVA虚拟机)
JDK:为jvm提供了额外的类库工具,比如编译Java文件的javac二进制程序,这些都是存储在bin(binary)目录下
JRE:为Java程序提供执行环境,jre为jvm提供了几乎所有的依赖类库
jvm能执行java程序,不是直接执行java文件。Java与操作系统之间不是直接将.java文件转交给操作系统处理的,而是将.java文件通过javac二进制文件编译成.class文件,也称之为字节码文件。字节码文件也不是直接给操作系统执行。
普通程序与Java程序执行区别如图所示:
普通程序:
Java程序:
字节码文件操作系统也是不认识的,字节码文件还需要经过jvm加载为机器码,也就是Opcode操作码,翻译成机器码也就是操作系统能看得懂的语言后,操作系统才回去执行这个java程序。类似于黑盒测试,流程我们无法看见,只能看见我们编写的java规范编码被操作系统执行了。
jvm识别字节码文件后,翻译了字节码指令,翻译给操作系统,从而控制操作系统去执行相应的功能,所以,提及翻译,就不得不简单说一下JVM的翻译字节码文件的方式方法了,jvm翻译字节码常见的有两种不同的方式,一种是即时加载方法,一种是解释执行。解释执行是将字节码文件中的opcode与操作数翻译成op指令也就是机器代码,而即时加载是在特定情况下才会触发,将字节码翻译成机器码后执行。