简单介绍Java垃圾回收机制

 更新时间:2017年12月14日 14:31:49   投稿:mengwei  
这篇文章主要介绍了简单介绍Java垃圾回收机制,涉及一些相关的Java术语,Hotspot虚拟机,jvm体系结构等内容,具有一定借鉴价值,需要的朋友可以参考下。

Java的内存分配与回收全部由JVM垃圾回收进程自动完成。与C语言不同,Java开发者不需要自己编写代码实现垃圾回收。这是Java深受大家欢迎的众多特性之一,能够帮助程序员更好地编写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实现和JavaAPI。

JavaHotSpot虚拟机

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

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

JVM体系结构

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

Java堆内存

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

新生代(YoungGeneration)

Eden空间(Edenspace,任何实例都通过Eden空间进入运行时内存区域)

S0Survivor空间(S0Survivorspace,存在时间长的实例将会从Eden空间移动到S0Survivor空间)

S1Survivor空间(存在时间更长的实例将会从S0Survivor空间移动到S1Survivor空间)

老年代(OldGeneration)实例将从S1提升到Tenured(终身代)

永久代(PermanentGeneration)包含类、方法等细节的元信息

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

总结

以上就是本文关于简单介绍Java垃圾回收机制的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • java正则匹配读取txt文件提取特定开头和结尾的字符串

    java正则匹配读取txt文件提取特定开头和结尾的字符串

    通常我们可以直接通过文件流来读取txt文件的内容,但有时候也会遇到问题,下面这篇文章主要给大家介绍了关于java正则匹配读取txt文件提取特定开头和结尾的字符串的相关资料,需要的朋友可以参考下
    2022-11-11
  • java并发包工具CountDownLatch源码分析

    java并发包工具CountDownLatch源码分析

    这篇文章主要为大家介绍了java并发包工具CountDownLatch源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 基于SpringBoot实现验证码功能的代码及思路

    基于SpringBoot实现验证码功能的代码及思路

    SpringBoot技术是目前市面上从事JavaEE企业级开发过程中使用量最大的技术,下面这篇文章主要给大家介绍了如何基于SpringBoot实现验证码功能的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • java 中模式匹配算法-KMP算法实例详解

    java 中模式匹配算法-KMP算法实例详解

    这篇文章主要介绍了java 中模式匹配算法-KMP算法实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • 通过Java实现中文分词与文本关键词提取

    通过Java实现中文分词与文本关键词提取

    这篇文章主要为大家详细介绍了如何利用Java实现中文分词以及文本关键词提取功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习学习
    2023-06-06
  • 详解Springboot @Cacheable 注解(指定缓存位置)

    详解Springboot @Cacheable 注解(指定缓存位置)

    这篇文章主要介绍了详解Springboot @Cacheable 注解(指定缓存位置),使用  @Cacheable  注解就可以将运行结果缓存,以后查询相同的数据,直接从缓存中取,不需要调用方法,需要的朋友可以参考下
    2023-09-09
  • 升级dubbo2.7.4.1版本平滑迁移到注册中心nacos

    升级dubbo2.7.4.1版本平滑迁移到注册中心nacos

    这篇文章主要为大家介绍了2.7.4.1的dubbo平滑迁移到注册中心nacos的两种版本升级方案,以及为什要升级,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • Java爬虫爬取漫画示例

    Java爬虫爬取漫画示例

    这篇文章主要介绍了Java爬虫爬取漫画示例,大部分的爬虫入门教学都是爬取图片的,本文就来测试一下爬取网站的漫画,需要的朋友可以参考下
    2023-04-04
  • Java 超详细讲解数据结构中的堆的应用

    Java 超详细讲解数据结构中的堆的应用

    堆首先是一个完全二叉树,堆分为小根堆和大根堆。小根堆,所有结点的左右子节点都不小于根节点;大根堆,所有结点的左右子节点都不大于根节点。优先级队列(priorityQueue)底层就是一个小根堆
    2022-04-04
  • java Volatile与Synchronized的区别

    java Volatile与Synchronized的区别

    这篇文章主要介绍了java Volatile与Synchronized的区别,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12

最新评论