技术理论-【JVM】-01-基础概念
学习背景
JVM(Java Virtual Machine)是运行java程序的程序。
为什么要用java语言来开发程序呢?
- 面向对象语言;
- “一次编译,到处运行”(跨平台);
- 自动垃圾回收机制;
- 丰富的第三方工具库
计算机只认识机器指令,但是机器指令写的程序可读性非常差,于是人们发明了高级语言(比如C、C++、JAVA等),使得程序的可读性更高和编程更容易。但是高级语言程序需要增加编译工作,将程序翻译成机器语言。由于操作系统不一样,程序就需要编写成各种OS版本才能运行,增加了太多额外开发工作。JAVA通过JVM的方式,让JAVA程序编译成统一的class文件,然后让JVM运行的时候翻译成对应的OS机器指令,实现了程序跨平台的特性。
java的一切优点都是基于JVM的基础上,但是JVM也会带来很多相关的问题(比如内存溢出、效率低下等),所以了解JVM的运行原理才能真正的掌握好java语言,才能开发优秀的java程序。
JVM的核心组件
JVM由7大部分组成。
- 类加载子系统;
- 方法区;
- 堆;
- 栈;
- PC(Program Counter)寄存器;
- 执行引擎;
- 垃圾回收器;
类加载子系统:读取class信息和解析相关引用class(找到class文件)。
方法区:保存class文件信息。
堆:存放java对象,就是new Object()的时候在堆里面创建对象。
栈:存放java程序线程信息,如局部基础类型变量,方法返回信息等。
PC(Program Counter)寄存器:存放java线程当前运行指令信息。
执行引擎:将class指令翻译成对应OS的机器指令并执行指令。
垃圾回收器GC:负责回收堆内存空间。
真正需要关心的部分是方法区的大小、栈的大小、堆的大小和管理机制、GC垃圾回收器的回收算法和回收器类型。
其他的组件都是固定底层机制,无法通过参数修改。
java还可以调用一些本地OS的程序,所以JVM中堆和栈都会有一个特殊的本地内存和本地方法栈的概念。不过这种方式并不常用,暂时不用关心。
JVM安装
JVM是通过安装JDK来完成的,不是独立安装JVM。
- JVM是java虚拟机;
- JRE是java的运行环境;
- JDK是java的开发环境;
JAVA程序执行过程
首先编写程序java文件,然后编译成class文件,最后运行class文件。
通过java命令运行class文件,JVM先加载class文件,将class信息存放在方法区,然后找到程序入口函数并生成主线程,每个线程对应一个私有栈和PC,如果有new操作就会在堆中创建对象,如果还开启了子线程,会创建子线程的私有栈和PC。
当前运行线程的PC将被执行引擎运行。垃圾回收器会自动处理堆中无效对象。
总结
- JVM有7大组件;
- 方法区、堆、栈、垃圾回收器可以通过参数调整;
- JVM不能单独安装,需要安装JDK;
- java程序以线程的方式运行;