本文借鉴《深入理解Java虚拟机》与《Java虚拟机规范》进行编写,欢迎阅读与讨论
JVM是什么
JVM即Java虚拟机(Java Virtual Machine),万事万物都要有其运行的环境,对于Java虚拟机来说,他为Java语言提供了运行环境,同时他自身也需要运行在操作系统之上。这样的好处就在于将编程语言和操作系统进行了解耦合,我们程序员不用在关注于操作系统的变换,只需要专注于和Java虚拟机交互。
Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。
可以这样说,Java语言不一定是最好的语言,但是Java虚拟机是最牛逼的虚拟机。
JVM学习路线
接下来一段时间我将整理一下JVM的核心知识点,也欢迎大家一起讨论交流。
主要分为以下几部分:
1 内存管理篇 [本篇链接]
介绍虚拟机中内存是如何划分的以及每一部分的作用。另外还会介绍JVM执行引擎。
2 垃圾回收篇 [本篇链接]
介绍内存分配与回收,垃圾回收算法和垃圾回收器
3 字节码指令篇 [暂未更新]
介绍一些常见的字节码指令及其作用。
4 类加载机制篇 [暂未更新]
讲解Class文件结构、类加载机制、类加载器工作原理等。
5 性能监控与调优篇 [暂未更新]
介绍常见的JVM分析的工具以及调优办法
可以关注下我的JVM专栏,我会不定期的去更新后面的内容。
Java技术体系
Java技术体系包括以下几个组成部分:
- Java程序设计语言(包括Java、Clojure、Groovy等运行在JVM上的语言)
- 各种硬件平台上的Java虚拟机
- Class文件格式
- Java API类库
- 来自商业机构和开源社区的第三方Java类库
我们可以把Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境。另外,可以把Java API类库中的Java SE API子集和Java虚拟机这两部分统称为JRE(Java Runtime Environment),JRE是支持Java程序运行的标准环境。如下图:
JVM的生命周期
1 JVM启动
通过引导类加载器(bootstarp class loader)创建一个初始类来完成,这个类是由虚拟机具体实现指定的。
2 JVM执行
Java虚拟机的任务就是执行Java程序,程序开始执行他就运行,程序结束时他就停止。
执行一个Java程序真正执行的其实就是一个Java虚拟机进程。
3 JVM退出
大概有以下几种情况:
- 程序正常结束
- 程序执行过程中遇到异常终止
- 操作系统的导致其异常终止
- 程序主动调用JVM退出的API(如System类的exit方法)等