转载自  Java GC系列(1):Java垃圾回收简介

这篇教程是系列第一部分。首先会解释基本的术语,比如JDK、JVM、JRE和HotSpotVM。接着会介绍JVM结构和Java 堆内存结构。理解这些基础对于理解后面的垃圾回收知识很重要。

Java关键术语

  • JavaAPI:一系列帮助开发者创建Java应用程序的封装好的库。
  • Java 开发工具包 (JDK):一系列工具帮助开发者创建Java应用程序。JDK包含工具编译、运行、打包、分发和监视Java应用程序。
  • Java 虚拟机(JVM):JVM是一个抽象的计算机结构。Java程序根据JVM的特性编写。JVM针对特定于操作系统并且可以将Java指令翻译成底层系统的指令并执行。JVM确保了Java的平台无关性。
  • Java 运行环境(JRE):JRE包含JVM实现和Java API。

Java HotSpot 虚拟机

每种JVM实现可能采用不同的方法实现垃圾回收机制。在收购SUN之前,Oracle使用的是JRockit JVM,收购之后使用HotSpot JVM。目前Oracle拥有两种JVM实现并且一段时间后两个JVM实现会合二为一。

HotSpot JVM是目前Oracle SE平台标准核心组件的一部分。在这篇垃圾回收教程中,我们将会了解基于HotSpot虚拟机的垃圾回收原则。

JVM体系结构

下面图片总结了JVM的关键组件。在JVM体系结构中,与垃圾回收相关的两个主要组件是堆内存和垃圾回收器。堆内存是内存数据区,用来保存运行时的对象实例。垃圾回收器也会在这里操作。现在我们知道这些组件是如何在框架中工作的。

Java堆内存

我们有必要了解堆内存在JVM内存模型的角色。在运行时,Java的实例被存放在堆内存区域。当一个对象不再被引用时,满足条件就会从堆内存移除。在垃圾回收进程中,这些对象将会从堆内存移除并且内存空间被回收。堆内存以下三个主要区域:

  1. 新生代(Young Generation)

    • Eden空间(Eden space,任何实例都通过Eden空间进入运行时内存区域)
    • S0 Survivor空间(S0 Survivor space,存在时间长的实例将会从Eden空间移动到S0 Survivor空间)
    • S1 Survivor空间 (存在时间更长的实例将会从S0 Survivor空间移动到S1 Survivor空间)
  2. 老年代(Old Generation)实例将从S1提升到Tenured(终身代)
  3. 永久代(Permanent Generation)包含类、方法等细节的元信息

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

在本系列的第二篇将会介绍Java垃圾回收是如何工作的。

Java GC系列(1):Java垃圾回收简介相关推荐

  1. java gc 对象可达性_JVM垃圾回收系列---GC Roots可达性分析

    JVM的垃圾回收对于Java开发人员来说是比较透明的,本文采用问答的形式进行展开,希望能够解释下垃圾回收的一些问题.那么首先第一个问题 问:什么样的对象会被回收. 答:已经死亡的对象,不可达的对象,肯 ...

  2. Java GC系列(4):垃圾回收监视和分析

    转载自  Java GC系列(4):垃圾回收监视和分析 在这个Java GC系列教程中,让我们学习用于垃圾回收监视和分析的工具.然后,选用一种工具来监视一个Java示例程序的垃圾回收过程.如果你是一名 ...

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

    转载自   Java GC系列(2):Java垃圾回收是如何工作的 本教程是为了理解基本的Java垃圾回收以及它是如何工作的.这是垃圾回收教程系列的第二部分.希望你已经读过了第一部分:<Java ...

  4. 【趣话编程】一个Java对象的回忆录:垃圾回收

    简介:趣话编程第三期,今天让我们一起去看看一个Java对象的回忆录:垃圾回收. 原文链接 对象的诞生 "你醒啦!",迷迷糊糊中听到一个声音,我睁开了眼睛,发现一个小伙伴正看着我. ...

  5. java stw_聊聊JAVA GC系列(6) - STW

    上回介绍了"平平无奇"的标记清除算法却是JAVA GC的灵魂, 介绍的过程中留下了几个问题, 其中一个问题是: 标记清除算法正在运行时各个对象的依赖关系发生了变化怎么办? 我们先假 ...

  6. java和net共同点,Java和.NET中的垃圾回收机制比较

    相同点: 都采用了分代的机制. 都支持并发GC. 都没有采用引用计数方式,而是采用了追踪技术. .NET中,可以通过代码GC.Collect() 强制要求CLR进行垃圾回收(由于垃圾回收是异步的,CL ...

  7. Java程序员的日常—— 垃圾回收中引用类型的作用

    在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...

  8. Java虚拟机(十三)——垃圾回收概述

    文章目录 概述 什么是垃圾 为什么需要GC 早期垃圾回收 Java垃圾回收机制 大厂面试题: 蚂蚁金服: 百度: 天猫: 滴滴: 京东: 阿里: 字节跳动 概述 垃圾收集,不是Java语言的伴生产物, ...

  9. java整段标记_聊聊JAVA GC系列(7) - 标记整理算法

    在介绍"平平无奇"的标记清除算法时, 还留下了另一个问题, 就是内存碎片的问题. 内存碎片的问题是指, 每次回收的内存都是比较分散的, 可以加起来是一个比较大的数值, 但是由于可用 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第24期)
  2. 【转载】SAP表修改概览
  3. yum命令报错在linux下,执行yum命令报错
  4. fedora下编译运行java傻瓜入门级教程
  5. android 自定义ratingbar 图片显示不全的解决方案
  6. 基于SWT的Sash和FormLayout的自定义分隔窗体
  7. 六石风格:雨伞用袋子套起来
  8. UltraEdit64位破解版绿色版下载及激活步骤
  9. 说到项目管理软件,不得不提的是禅道和JIRA
  10. 语音信号处理的一些基础知识
  11. kears编写CNN网络,实现对mnist的识别
  12. svg 右键意见删除cvs_一种实现svg自定义鼠标右键菜单的方法
  13. LeetCode07整数反转(JAVA)
  14. 我们计划为EasyDSS定制开发一款超低延时的EasyPlayer Flash播放器
  15. AutoCAD2012从入门到精通中文视频教程 第24课 路径阵列(个人收藏)
  16. 商品价格监控接口,超详细的介绍
  17. PDF不能复制或编辑:用Adobe acrobat将扫描版PDF转换为可编辑版本
  18. JESD79-4 第4章 SDRAM命令描述与操作(4.24)
  19. SpringBoot结合Quartz实现定时任务
  20. 详解1247:河中跳房子(二分经典例题)

热门文章

  1. 爬楼梯与路径类题目记忆化递归与动态规划双解法(Leetcode题解-Python语言)
  2. C++this指针的用途
  3. 写出TREE-MINIMUM 和TREE-MAXIMUM的递归版本(算法导论第三版12.2-2)
  4. html坐标轴背景色,CSS 背景(css background)
  5. php files得不到导入的文件,PHP判断文件是否被引入的方法get_included_files用法示例...
  6. 多项式对数函数ln f(x)
  7. 【杭电多校2020】Fibonacci Sum【斐波拉契通项】【推式子】
  8. P3172-[CQOI2015]选数【dp,容斥】
  9. hdu5709-Claris Loves Painting【线段树合并】
  10. P5491-[模板]二次剩余