JVM的基础知识
JVM从编译到执行
-
Java 程序的执行过程
一个Java程序,首先经过javac编译成.class文件,然后JVM将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM作为.class翻译的存在,输入字节码,调用操作系统函数。
过程如下:Java文件->编译器->字节码->JVM->机器码
-
JVM、JRE、JDK的关系
JVM只是一个翻译,把class翻译成机器识别的指令,同时一个class文件还要需要很多依赖库,这时候就需要用到JRE
JRE是什么,它除了包含JVM之外,提供了很多类库,JVM标准加上实现的一大堆基础类库,就组成了Java运行时环境
但对于一般开发来说,JRE还是不够满足,我们需要编译代码,调试代码,打包代码,有时候还需要反编译代码,这时需要使用到JDK
-
JVM的作用:从软件层面屏蔽不同操作系统在底层和指令的不同,同时JVM是一个虚拟化的操作系统,类似于Linux或Windows的操作系统,只是它架在操作系统之上,接收字节码,把字节码翻译成操作系统指令进行执行
-
JVM的特性:跨平台和跨语言
-
跨平台:我们写一个类,在不同的操作系统上执行效果是一样的,为了实现跨平台,不同操作系统需要对应的JDK版本
-
跨语言:JVM只识别字节码,所以JVM其实跟语言是解耦的,没有直接关联,JVM运行不是翻译Java文件,而是识别class文件,这个一般称之为字节码。像Groovy、kotlin、Scala等语言,其实也是编译成字节码,所以也能在JVM上跑。Java的跨语言特性一定程度上奠定了非常强大的Java语言生态圈。
-
-
常见的JVM实现
-
JVM整体知识模块
JVM 能涉及非常庞大的一块知识体系,比如内存结构、垃圾回收、类加载、性能调优、JVM 自身优化技术、执行引擎、类文件结构、监控工具等。
但是在所有的知识体系中,都或多或少跟内存结构有一定的关系: 比如垃圾回收回收的就是内存、类加载加载到的地方也是内存、性能优化也涉及到内存优化、执行引擎与内存密不可分、类文件结构与内存的设计有关系,监控工具也会监控内存。所以内存结构处于 JVM 中核心位置。也是属于我们入门 JVM 学习的最好的选择。