JVM基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM基础相关的知识,希望对你有一定的参考价值。

JVM基础知识

在我学习JVM的过程中,首先大致有了一个大的整体性概念,然后在进一步深入学习。

Java从编译到执行

一个 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_201in的路径下就可以找得到。
JRE:为运行时环境,那么在程序运行时就势必会用到一些相关的类库(jar),比如说I/O、net、until等,在jdk1.X.X_201jrelib下能看到。
JVM:虚拟机,最重要的就是将class文件翻译成真实的操作系统能识别的指令。
代码到了JVM运行,需要有依赖库,依赖库来自JRE,代码能正常运行后,还有其他的需求(反编译、监控性能等),就要用到JDK。

跨平台和跨语言

跨平台:因为JVM是虚拟机,它是在操作系统上的虚拟(如图一),它接收字节码并将其翻译成机器码,让底层得以执行,所以当有了不同版本(Linux、Windows等)的JRE/JDK,JVM就可以运行,从而实现了跨平台。
跨语言:因为接收字节码并将其翻译成机器码,也就意味着,某种语言是这种模式,JVM也能执行,比如scala、groovy等

JVM的实现/版本

        Oracle-Hotspot(居多)、IBM-J9、Alibaba-TaobaoVM等

以上是关于JVM基础的主要内容,如果未能解决你的问题,请参考以下文章

详解Jvm内存结构

详解Jvm内存结构

详解Jvm内存结构

分析定位占用CPU资源高的JVM线程

[vscode]--HTML代码片段(基础版,reactvuejquery)

JVM性能分析工具jstack介绍