标签:需要 机器码 大致 路径 window 依赖 过程 win alibaba
JVM基础知识在我学习JVM的过程中,首先大致有了一个大的整体性概念,然后在进一步深入学习。
一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在,输入字节码,调用操作系统函数。
简化一下上面的描述:Java 文件->编译器>字节码->JVM->机器码
在开发工具编写代码时,所看到的是Xxxx.java文件,当点击运行后,经过编译(javac)后便成了Xxx.class文件,之后就进入JVM进行解释执行。到了这里第一个概念就出现了,即JDK、JRE、JVM三者之间的关系,如何去描述。
JDK
JDK是Java语言的开发工具包(Java Development Kit),百度百科上做了比较详细的描述,以下不再赘述。
JRE
Java运行时环境(Java Runtime Environment)
JVM
Java虚拟机(Java Virtual Machine)
从JDK的结构图(如图一)中发现JDK包含了JDK,JRE又包含了JVM。
JDK:既然是开发工具包,自然就提供了相应的工具,例如javac、javap、jvisualvm(JDK原生监控JVM的工具)等,这些工具在jdk1.X.X_201\bin的路径下就可以找得到。
JRE:为运行时环境,那么在程序运行时就势必会用到一些相关的类库(jar),比如说I/O、net、until等,在jdk1.X.X_201\jre\lib下能看到。
JVM:虚拟机,最重要的就是将class文件翻译成真实的操作系统能识别的指令。
代码到了JVM运行,需要有依赖库,依赖库来自JRE,代码能正常运行后,还有其他的需求(反编译、监控性能等),就要用到JDK。
跨平台:因为JVM是虚拟机,它是在操作系统上的虚拟(如图一),它接收字节码并将其翻译成机器码,让底层得以执行,所以当有了不同版本(Linux、Windows等)的JRE/JDK,JVM就可以运行,从而实现了跨平台。
跨语言:因为接收字节码并将其翻译成机器码,也就意味着,某种语言是这种模式,JVM也能执行,比如scala、groovy等
Oracle-Hotspot(居多)、IBM-J9、Alibaba-TaobaoVM等
标签:需要 机器码 大致 路径 window 依赖 过程 win alibaba
原文地址:https://blog.51cto.com/14507778/2543277