Java虚拟机部分属于Java的高级编程知识,所以学习这一部分内容需要读者有一定的编程基础。
作为系列的第一篇,我们先简单认识一下JVM,什么是JVM?JVM是做什么的?JVM的作用是什么?
1
虚拟机与计算机的关系
在计算机的硬件系统中,机器码是唯一能够被识别并执行的计算机语言。所以对于高级编程语言(如Java、C++、Python)编写的代码,需要通过一个"托管环境"负责将代码转换成计算机能够理解的机器码,程序才得以在计算机上运行。
而这个"托管环境"就是"虚拟机--VM",于是引出本篇的主角:Java虚拟机--JVM。
2
三种JVM
目前的JVM产品共来自以下三家公司:
Sun公司自己的HotSpot;
BEA公司的JRockit;
IBM公司的J9 JVM;
在JDK1.7及之前的版本采用HotSpot,之后由于Sun公司和BEA公司都被oracle收购,自JDK1.8起采用Sun公司的HotSpot和BEA公司的JRockit两个JVM中精华形成jdk1.8的JVM。
3
JVM为编程人员提供的福利
垃圾回收机制--GC
在我们使用计算机的时候,如果硬盘空间满了我们需要手动删除电脑上的文件来重新获取存储空间。
但对于Java程序来说,我们通常不需要手动去清理空间,这项"福利"就源自JVM提供的自动垃圾回收机制。
内存分类管理
就像我们使用计算机需要用不同文件夹来分类存放文件,JVM为我们提供了自动的内存分类管理,用以优化java程序的内存使用。
需要注意的是:GC和内存分类管理是JVM的重中之重,在之后的文章中会作详细的拆解。
除此之外,JVM还提供了诸如数组越界、动态类型、安全权限等等的动态检测,使我们免于书写这些无关业务逻辑的代码。
本篇的内容相对简短一些,旨在帮助读者对JVM预先建立一个简单的认识,之后将做深入的拆解。