打算写一个介绍Java垃圾回收基础的系列文章,分为四个部分:Java垃圾回收简介Java垃圾回收器是如何工作的?各种类型的Java垃圾收集器Java垃圾收集的监控与分析本文是本系列的第一篇文章。本文将介绍一些基本术语,如:JDK、JVM、JRE、HotSpotVM,并了解JVM架构和Java堆内存结构。在开始学习Java垃圾回收机制之前,确实有必要了解这些基本的东西。Java关键术语JavaAPI–帮助程序员创建Java应用程序的打包库的集合Java开发工具包(JDK)–使程序员能够开发Java应用程序的工具集合Java虚拟机(JVM)–JVM是一种抽象计算机。Java程序是根据JVM规范编写的。JVM是根据不同的操作系统平台来实现的。它将Java指令翻译成相应平台上的指令并执行。这样,Java程序就可以实现平台无关性。Java运行时环境(JRE)–JRE由JVM和JavaAPI的实现组成。JavaHotSpot虚拟机各个JVM的实现在垃圾回收原理的实现上都会有一些差异。甲骨文收购SUN之前有JRockitJVM,收购SUN之后有HotSpot虚拟机。目前,甲骨文同时维护着这两个虚拟机,并声称未来会合并这两个虚拟机。HotSpot虚拟机是Oracle标准版平台的核心组件。在这个垃圾收集系列中,我们将使用HotSpot虚拟机来了解垃圾收集的基本原理。JVM体系结构下图概述了JVM中的主要组件。在JVM架构中,堆内存和垃圾回收器两部分都与垃圾回收有关。堆内存是运行时用来存放实例对象的数据空间,垃圾回收器运行在堆内存上。现在我们大致知道它们是如何工作的了。Java堆内存在Java的内存模型中,最重要的就是理解堆内存的概念。运行时的Java实例对象存储在堆内存空间中。当一个对象不再被引用时,它就可以从堆中回收。在垃圾回收时,这些对象会从堆内存中被清除,同时它们的空间也会被回收。堆内存的空间主要分为三部分,年轻代a、伊甸区(所有实例在运行时最初都分配到伊甸区)b、S0幸存者空间(较旧的对象从伊甸区移动到S0区,其实是eden区的对象在eden区一次YoungGC后被移动到S0)c、S1SurvivorSpace(较旧的对象从S0区移动到S1区,实际上是在Young期间GC过程当S0区满时,将eden区存活对象和S0区存活对象移动到S1区)老年代(S0和S1经过几轮迭代后存活的对象被提升为老年代)永久代(包含一些元数据,如类、方法等。永久代空间已在JavaSE8功能中删除