首页 > Java, 挨踢(IT), 未分类 > Java垃圾回收(1):入门

Java垃圾回收(1):入门

2014年10月29日 发表评论 阅读评论 846 人阅读    

在Java,内存空间的分配和回收都是有Java虚拟机的垃圾回收进程自动完成的。这点和C语言不同,在Java中,不需要开发人员专门垃圾回收相关的代码。这是使Java流行起来的众多原因之一,并且帮助开发人员写出了更好的Java应用。

接下来,将通过四篇文章来介绍Java垃圾回收的一些基础知识。

  1. Java垃圾回收入门
  2. Java垃圾回收的工作原理
  3. 常见的四种Java垃圾收集器
  4. 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),而垃圾收集器正好也作用此。现在,我们知道,从一个更高层次上来看,这些组件是如何运作的。

HotSpot虚拟机架构

Java堆内存结构

重要的是要理解堆内存在Java虚拟机内存模型所扮演的角色。在运行时,Java实例存储在堆内存中。当一个实例不再被任何对象引用时,将有可能从堆内存中被回收。在垃圾回收时,这些对象将从堆内存中被回收,内存空间被释放。堆内存中主要有三大区域:

  1. 新生代(Young Generation)
    1. Eden Space:对象创建到运行时内存区域。
    2. S0 Survivor:老的实例从Eden Space移动到这里
    3. S1 Survivor:老的实例从S0移动到S1
  2. 老年代(Old Generation):实例从S1躲过垃圾回收晋级到老年代
  3. 永久代(Permanent Generation):包含一些元信息,例如类(class)、方法详情

Java堆内存结构

注意:永久代已经在Java SE 8中被移除

在下一篇文章中,我们将看看Java垃圾回收到底是如何工作的?

原文链接:Java Garbage Collection Introduction



作 者: D瓜哥,https://www.diguage.com/
原文链接:https://wordpress.diguage.com/archives/113.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。