资讯专栏INFORMATION COLUMN

细述 Java垃圾回收机制→Java Garbage Collection Introduction

codergarden / 1150人阅读

摘要:在架构中,堆内存和垃圾回收器这两个部分和垃圾回收相关。堆内存在的内存模型中,最重要的是要了解堆内存的概念。在垃圾回收的过程中,这些对象将被从堆内存中清除,同时它们的空间也就被回收了。

本文非原创,翻译自Java Garbage Collection introduction
在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的。和C语言不一样的是Java程序员不需要手动写垃圾回收相关的代码。这是使得Java如此流行,同时也是Java能帮助程序员写出更好的Java应用的优点之一。

计划写一个介绍Java垃圾回收基础的系列文章,共分四部分:

Java垃圾回收简介

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

各种类型的Java垃圾回收器

Java垃圾回收的监控和分析

本文是这个系列的第一篇文章,这篇文章将会介绍一些基本术语,如:JDK,JVM,JRE,HotSpot VM,以及理解JVM的架构和Java堆内存结构。在开始学习Java垃圾回收机制之前确实有必要了解一下这些基本东西。

关键的Java术语

Java API–一个帮助程序员创建Java应用的打包好的库集合

Java Development Kit(JDK)–一个使得程序员能够开发Java应用的工具集合

Java Virtual Machine(JVM)–JVM是一个抽象的计算机。Java程序是针对JVM规范写的。JVM是根据不同的操作系统平台实现的,它将Java指令翻译成对应平台上的指令,并执行。这样Java程序能够达到平台独立性。

Java Runtime Environment(JRE)–JRE由一个JVM的实现和Java API组成。

Java HotSpot虚拟机

每个JVM的实现在对垃圾回收的原理的实现方式上会有一些不同。在收购SUN之前Oracle有JRockit JVM,收购SUN之后有了HotSpot虚拟机。目前Oracle同时维护了这两个虚拟机,并宣称将来会将两个虚拟机合并。

HotSpot虚拟机是Oracle标准版平台的核心组成部分。在本垃圾回收系列文章中我们将通过HotSpot虚拟机来了解垃圾回收的基本准则。

JVM 架构

下面的这幅图概括了一个JVM中的主要组成。在JVM架构中,堆内存和垃圾回收器这两个部分和垃圾回收相关。堆内存是运行时用来存储实例对象的数据空间,垃圾回收器运行在堆内存上。现在我们大概知道它们是怎样的一个工作模式。

Java 堆内存

在Java的内存模型中,最重要的是要了解堆内存的概念。运行时的Java实例对象存储在堆内存空间中。当一个对象不再被引用了,它变成可被从堆内存中回收空间。在垃圾回收的过程中,这些对象将被从堆内存中清除,同时它们的空间也就被回收了。堆内存的空间主要分成了三部分,

年轻代
a, Eden区(所有实例在运行时最初都分配到eden区中)
b, S0 Survivor Space(老一些的对象被从eden区移动到S0区,其实是eden区中的对象经过一次对eden区的Young GC还存活的对象被移动到S0)
c, S1 Survivor Space(再老一些的对象被从S0区移动到S1区,其实是在Young GC过程中S0区已满,则会将eden区中还存活的对象和S0区中的存活对象移动到S1区中)

老年代(经过S0,S1中几轮迭代后还存活的对象被提升到老年代)

永久代(包含一些元数据像类、方法等等)

永久代空间在Java SE8特性中已经被移除

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65013.html

相关文章

  • 细述 Java垃圾回收机制→How Java Garbage Collection Works?

    摘要:当一个实例被创建的时候,它最初被存放在堆内存空间的年轻代的区中。老年代或者永久代是堆内存的第二个逻辑部分。在垃圾回收过程中扫描属于部分的堆内存。一旦实例从堆内存中删除了,它们原来的位置将空出来给以后分配实例使用。 本文非原创,翻译自How Java Garbage Collection Works?在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的。和C语言不一样的是...

    cc17 评论0 收藏0
  • 细述 Java垃圾回收机制Java Garbage Collection Monitoring a

    摘要:垃圾回收监控和分析工具是在安装时免费提供的。监控现在可以监控垃圾回收过程了。至少我们可以知道程序中存在和对象内存分配和垃圾回收相关的问题。到此为止,关于垃圾回收的系列文章已经完结了。 本文非原创,翻译自Java Garbage Collection Monitoring and Analysis在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的。和C语言不一样的是Ja...

    xuhong 评论0 收藏0
  • 细述 Java垃圾回收机制→Types of Java Garbage Collectors

    摘要:并发标记清除垃圾回收器,使用多个线程来扫描堆内存并标记可被清除的对象,然后清除标记的对象。垃圾回收器应用于大的堆内存空间。它将堆内存空间划分为不同的区域,对各个区域并行地做回收工作。它会通过把重复的值移动到同一个数组来优化堆内存占用。 本文非原创,翻译自Types of Java Garbage Collectors在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的。...

    Julylovin 评论0 收藏0
  • 程序员练级攻略(2018):Java底层知识

    摘要:最黑科技的玩法就是字节码编程,也就是动态修改或是动态生成字节码。使用字节码编程可以玩出很多高级玩法,其中最高级的玩法是在程序运行时进行字节码修改和代码注入。 showImg(https://segmentfault.com/img/bVbkqqg?w=1142&h=640);这个是我订阅 陈皓老师在极客上的专栏《左耳听风》,我贴出来是为了自己以后方便学习和记忆,同时也分享给你们一起学习...

    wean 评论0 收藏0
  • JVM 的 工作原理,层次结构 以及 GC工作原理

    摘要:执行引擎作用执行字节码,或者执行本地方法运行时数据区其实就是指在运行期间,其对内存空间的划分和分配。 虽是读书笔记,但是如转载请注明出处https://uestc-dpz.github.io..拒绝伸手复制党 JVM Java 虚拟机 Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实现了Java语言最重要的特征:即平台...

    qqlcbb 评论0 收藏0

发表评论

0条评论

codergarden

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<