在Java中,对象内存空间的分配与回收是由JVM中的垃圾回收进程自动完成的。与C语言不同的是,在Java中开发者不需要专门为垃圾回收写代码。这是使Java流行的众多特征之一,也帮助了程序员写出了更好的Java应用。

这是一个四部分的系列教程,以了解在Java中垃圾回收的基础,

  1. Java垃圾回收介绍
  2. Java垃圾回收如何工作?
  3. Java垃圾回收器的类型
  4. 监控和分析Java垃圾回收

这篇教程是系列中的第一部分。本篇中会解释一些基本术语,像JDK,JVM,JRE,HotSpot VM,然后去理解JVM的架构和Java堆内存结构。在进入垃圾回收教程之前,理解这些基础的东西很重要。

关键Java名词术语

  • Java API –是打包好库的集合,可以帮助开发者创建Java应用程序
  • Java Development Kit (JDK) – 是一个工具集,可以使开发者创建Java应用程序。JDK包括编译、运行、打包、发布和监控Java应用程序的工具。
  • Java Virtual Machine (JVM) – JVM是一个抽象的计算机器。Java程序根据JVM规范来编写。JVM是针对特定平台的,它将JAVA程序翻译成底层平台特定的指令去执行。JVM使得Java程序具有平台独立性。
  • Java Runtime Environment (JRE) – JRE由JVM实现和JAVA API组成。

Java HotSpot 虚拟机

每一个JVM实现可能在垃圾回收原则实现的方式上有所不同。在收购SUN之前,Oracle公司已经了又JRockit JVM,收购之后,又有了HotSpot JVM。现在Oracle同时维护两个JVM实现,Oracle也已声明,在经过一段时间后,这两个JVM实现会被整合成一个。

HotSpot JVM是作为Oracle SE平台部分的一个核心部件。在这个垃圾回收教程中,我们会看到基于HotSpot虚拟机的垃圾回收原则。

JVM 架构

下图概述了一个JVM中的关键部件。在JVM架构中,与垃圾回收相关的两个主要部件是堆内存和垃圾回收器。堆内存是运行时数据区域,实例会被存在这,垃圾回收器也在该区域操作。

现在我们知道这些东西是如何适应更大的计划。

Java堆内存 Heap Memory

理解在JVM内存模型中堆内存作用很重要。在运行时Java实例存放在堆内存区域。当一个对象不再被引用时,它有机会从堆内存中删除。在垃圾回收进程中,那些对象从堆内存中被去除,空间被回收。堆内存有三个区域,

  1. 年轻代Young Generation
    1. Eden区(任一实例进入运行时内存区)
    2. S0幸存区 (久一点的实例从eden区转移到S0)
    3. S1幸存区 (久一点的实例从S0区转移到S1)
  2. 年老代(实例从S1晋升)
  3. 持久代(包含元信息像类、方法细节)

更新:持久代(PermGen)区从Java SE 8 特征中被移除了。

在下一个部分中我们会看到关于在Java中垃圾回收是如何工作的

查看原文

Java垃圾回收介绍(译)的更多相关文章

  1. [译]Java 垃圾回收介绍

    说明:这篇文章来翻译来自于Javapapers 的Java Garbage Collection Introduction 在Java中,对象内存空间的分配与回收是由JVM中的垃圾回收进程自动完成的. ...

  2. [译]Java垃圾回收是如何工作的

    说明:这篇文章来翻译来自于Javapapers 的How Java Garbage Collection Works 这部分教程是为了理解Java垃圾回收的基础以及它是如何工作的.这是垃圾回收系列教程 ...

  3. Java GC系列(2):Java垃圾回收是如何工作的?

    本文由 ImportNew - 伍翀 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 本教程是为了理解基本的Java垃圾回收以及它是如何 ...

  4. Java垃圾回收是如何工作的?

    本教程是为了理解基本的Java垃圾回收以及它是如何工作的.这是垃圾回收教程系列的第二部分.希望你已经读过了第一部分:<Java 垃圾回收介绍>. Java 垃圾回收是一项自动化的过程,用来 ...

  5. [译]GC专家系列2:Java 垃圾回收的监控

    原文链接:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/ 这是"成为GC专家系 ...

  6. [译]Java 垃圾回收的监控和分析

    说明:这篇文章来翻译来自于Javapapers 的Java Garbage Collection Monitoring and Analysi 在这个系列的Java垃圾回收教程中,我们将看到可用于垃圾 ...

  7. 【转载】Java垃圾回收机制

    原文地址:http://www.importnew.com/19085.html Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联 ...

  8. Java GC系列(1):Java垃圾回收简介

    本文由 ImportNew - 好好先生 翻译自 javapapers. Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Ja ...

  9. [牛感悟系列]JAVA(1)理解JAVA垃圾回收

    理解JAVA垃圾回收的好处是什么?满足求知欲是一方面,编写更好的JAVA应用是另外一方面. 如果一个人对垃圾回收过程感兴趣,那表明他在应用程序开发领域有相当程度的经验.如果一个人在思考如何选择正确的垃 ...

随机推荐

  1. GitHub-撤销commit

    以下方法适用于:撤销最后一次提交的情况 步骤如下: 步骤1.使用 ”git log“ 命令 找到 想要撤销的操作之前的一次提交的commit id : 比如:使用 git log命令如下结果 comm ...

  2. 蓝桥杯--Quadratic Equation

    蓝桥杯--Quadratic Equation 问题描述 求解方程ax2+bx+c=0的根.要求a, b, c由用户输入,并且可以为任意实数. 输入格式:输入只有一行,包括三个系数,之间用空格格开. ...

  3. SQL拆分多规则的字符串分离数字。

    --拆分多规则字符串 DECLARE @Codes NVARCHAR(MAX) SET @Codes = '6*BC-007,*BC-016,9*BC-015' --对于*BC-015这种情况,则Qt ...

  4. SmallDateTime时间范围检查

    SamllDataTime是SQL Server中的一种表达时间的类型, 精度不高但是省空间,具体的细节就查看一下MSDN的文档吧. http://msdn.microsoft.com/zh-cn/l ...

  5. [Oracle] Group By 语句的扩展 - Rollup、Cube和Grouping Sets

    常常写SQL语句的人应该知道Group by语句的主要使用方法是进行分类汇总,以下是一种它最常见的使用方法(依据部门.职位分别统计业绩): SELECT a.dname,b.job,SUM(b.sal ...

  6. 为joomla加入下拉菜单的方法

    用 Joomla! 建站的大多数站长都须要在站点前台使用下拉菜单(dropdown menu),或者叫弹出菜单(slide menu),由于这样能够在有限的页面空间上公布很多其它的导航菜单,而且能够进 ...

  7. delphi 立即显示提示

    procedure TForm1.FormCreate(Sender: TObject); begin  Application.HintPause:=0;//立即显示  Application.hi ...

  8. 模拟TAB键

    模拟TAB键 (2013/6/7 22:35:29) SelectNext(ActiveControl,True,True); 屏蔽Alt+F4关闭键 (2013/6/7 22:35:39) 启动某些 ...

  9. 将PHP作为Shell脚本语言使用

    我们都知道.PHP是一种非常好的动态网页开发语言(速度飞快.开发周期短--).可是仅仅有非常少数的人意识到PHP也能够非常好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并 ...

  10. springMVC1 springmvc的基础知识

    springmvc第一天 springmvc的基础知识 springmvc课程安排: 第一天: 基础知识 springmvc框架(重点) mvc在b/s系统中应用方式 springmvc框架原理(Di ...