在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. UML图示

    来源: http://www.uml.org.cn/oobject/200901041.asp 近些天学习设计.由于没有具体项目,原有项目也没有什么设计的概念,只是看相关的书籍,所以着实有些抓狂.然最 ...

  2. char指针

    1.在C语言中,没有字符串类型,因此使用char指针表示字符串. 2.那么问题来了,使用char* 表示字符串,到哪里是结尾呢?因此需要一个特殊的字符作为哨兵,类似迭代器中的end(),这个哨兵就是' ...

  3. Codeforces Round #328 (Div. 2) C. The Big Race 数学.lcm

    C. The Big Race Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/592/probl ...

  4. perl详解

    http://www.blogjava.net/qileilove/archive/2013/09/04/403646.html

  5. LVS 之 DR 2

    http://www.cnblogs.com/kgdxpr/archive/2013/09/09/3309776.html http://lyp0909.blog.51cto.com/508999/5 ...

  6. debian下Vnc

    1 VNC(Virtual Network Computing,虚拟网络计算)最早是一套由英国剑桥大学AT&T实验 室在2002年开发的轻量型的远程控制计算机软件,其采用了 GPL 授权条款, ...

  7. python实现之极简stack和queue

    用python实现一个极简的stack和queue,那是so easy的事情了,简洁易懂,适合小白~ 直接上代码吧: node: class LinkNode: def __init__( self, ...

  8. linux乱码问题

    命令输入: export LANG=zh_CN.GBK grep 匹配时高亮 先执行:export GREP_OPTIONS='--color=auto'; 后执行:grep 匹配内容 文件; 描述: ...

  9. Android(java)学习笔记99:android的短信发送器研究

    1.第一种可以调用系统内部的短信程序. 之前我曾经出现过一个bug就是报错: android.content.ActivityNotFoundException: No Activity found ...

  10. android文件系统挂载分析(1)---正常开机挂载

    未完,更新中 ... "android"系列分为三部分: 1.正常开机挂载 2.encryption 3.dm-verity 我们知道android有很多分区,如"sys ...