浅谈JVM和垃圾回收

写在前面

简单的介绍一下JVM(Java Virtual Machine)吧,它也叫Java虚拟机。虽然它叫虚拟机,但是实际上不是我们所理解的虚拟机,它更像操作系统中的一个进程。JVM屏蔽了各个操作系统底层的相关的东西,Java程序只需要生成对应的字节码文件,然后由JVM来负责解释运行。

介绍几个容易混淆的概念,JDK(Java Development Kit) 可以算是整个Java的核心,其中有编译、调试的工具包和基础类库,它也包含了JRE

JRE(Java Runtime Environment),包含了JVM和基础类库。而JVM就是我们今天要聊的主角,开篇聊到,JVM负责解释运行,它会将自己的指令映射到当前不同设备的CPU指令集上,所以只需要在不同的操作系统上装不同版本的虚拟机即可。这也给了Java跨平台的能力。

JVM的发展

就跟我们用三方库一样,同样的功能有不同的实现。JVM也是一样的,第一款JVM是Sun公司的Classic VM,JDK1.2之前JVM都是采用的Classic VM,而之后,逐渐被我们都知道的HotSpot给替代,直到JDK1.4,Classic VM才完全被弃用。

HotSpot应该是目前使用最广泛的虚拟机(自信点,把应该去掉),也是OpenJDK中所带的虚拟机。但是你可能不知道,HotSpot最开始并不是由Sun公司开发,而是由一家小公司设计并实现的,而且最初也不是为Java语言设计的。Sun公司看到了这个虚拟机在JIT上的优势,于是就收购了这家公司,从而获得了HotSpot VM。

继续阅读