Java垃圾回收(1):入门
在Java,内存空间的分配和回收都是有Java虚拟机的垃圾回收进程自动完成的。这点和C语言不同,在Java中,不需要开发人员专门垃圾回收相关的代码。这是使Java流行起来的众多原因之一,并且帮助开发人员写出了更好的Java应用。
接下来,将通过四篇文章来介绍Java垃圾回收的一些基础知识。
本文是该系列的第一篇文章。将介绍几个基本的专业术语,例如JDK、Java虚拟机(JVM)、JRE、HotSpot虚拟机,接着将说明一下Java虚拟机的架构和Java堆的内存结构。在阅读本系列文章之前,理解这些基本知识是非常重要的。
关键术语
- Java API – 这是一个打包好的类库集合,可以帮助开发人员更快、更好地开发Java应用。
- JDK(Java开发工具) – 一系列可以让开发人员开发Java应用的工具。JDK包含了可以编译、运行、打包、分发以及监控Java应用的工具。
- Java虚拟机(JVM) – Java虚拟机是一个抽象的计算机。编写Java应用需要遵循Java虚拟机规范。Java虚拟机来应对具体的操作系统,它将Java指令转化成更底层的操作系统指令,然后执行他们。Java虚拟机可以实现Java应用的平台无关性。
- JRE – JRE包含Java虚拟机的实现和Java API。
HotSpot虚拟机
每一个Java虚拟机在垃圾回收概念的实现方式上都有可能不同。在Oracle收购SUN之前,Oracle已经拥有了JRockit虚拟机,收购SUN之后,又从SUN那里获得了HotSpot虚拟机。现在,Oracle维护这两个Java虚拟机,并且Oracle已经发布声明,将来会将这两个虚拟机合二为一。
HotSpot虚拟机作为Oracle SE平台的核心组件,有很高的研究价值。在这个Java垃圾回收系列文章里,我们重点研究基于HotSpot虚拟机的垃圾回收概念。
Java虚拟机架构
下面的这张图总结了Java虚拟机中的关键组件。在Java虚拟机架构中,有和两个组件和垃圾回收关系密切,就是堆内存(heap memory)和垃圾收集器(Garbage Collector)。堆内存是用于存储实例的运行时数据区(Runtime data area),而垃圾收集器正好也作用此。现在,我们知道,从一个更高层次上来看,这些组件是如何运作的。
Java堆内存结构
重要的是要理解堆内存在Java虚拟机内存模型所扮演的角色。在运行时,Java实例存储在堆内存中。当一个实例不再被任何对象引用时,将有可能从堆内存中被回收。在垃圾回收时,这些对象将从堆内存中被回收,内存空间被释放。堆内存中主要有三大区域:
- 新生代(Young Generation)
- Eden Space:对象创建到运行时内存区域。
- S0 Survivor:老的实例从Eden Space移动到这里
- S1 Survivor:老的实例从S0移动到S1
- 老年代(Old Generation):实例从S1躲过垃圾回收晋级到老年代
- 永久代(Permanent Generation):包含一些元信息,例如类(class)、方法详情
在下一篇文章中,我们将看看Java垃圾回收到底是如何工作的?
原文链接:Java Garbage Collection Introduction
原文链接:https://wordpress.diguage.com/archives/113.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。