iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >有哪些Java GC的相关问题
  • 145
分享到

有哪些Java GC的相关问题

2023-06-16 11:06:16 145人浏览 八月长安
摘要

这篇文章主要介绍“有哪些Java GC的相关问题”,在日常操作中,相信很多人在有哪些Java GC的相关问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些Java GC的相关问题”的疑惑有所帮助!接下来

这篇文章主要介绍“有哪些Java GC的相关问题”,在日常操作中,相信很多人在有哪些Java GC的相关问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些Java GC的相关问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Java GC

目标

遇到一个问题或者一个知识点,我们要理解和明白是要解决什么问题的。说到 Java GC 那这个 GC  的目的是什么呢?很显然是回收内存,因为内存是有限的,随着程序中创建的对象越来越多,如果进行回收就会导致内存越来越大,最后程序就会出现异常。既然目的是为了回收内存,那么新的问题来了,哪些对象可以被回收呢?什么时候进行回收呢?怎么回收呢?

哪些对象可以被回收

简单来说就是无用的对象可以被回收,那么换句话说,如果定义一个对象是无用的呢?这里主要有两种方法,一个叫引用计数法,一个叫可达性分析法。

引用计数

引用计数说的是如果一个对象被别的对象进行了一次引用,那么该对象会有一个引用计数器,这个计数器就会加一;如果被释放一下,引用计数器就会减一。当引用计数器的计数为  0 的时候就表示这个对象是无用的,此时就可以对这样对象进行回收了。表面上看好像挺合理的,实现起来也很方便,但是仔细一想就会发现有问题。既循环引用的问题,比如对象  A 引用了对象 B,但是对象 B 当中也引用了对象 A,那么这个时候对象 A 和对象 B 的引用计数器的计数都不会是  0,但是这两个对象都没有被其他对象引用,理论上来说这两个对象都是可以被回收的。

从上面看到,这种方案是有问题的会导致内存泄露。随之而来的就出现了另一种方案,可就是可达性分析。

可达性分析

可达性分析说的是从 GCRoots 的点作为起点,向下搜索,当找不到任何引用链的时候表示该对象为垃圾对象。那么哪些对象可以被认为是 Roots 节点呢?有  Java 栈中的对象,方法区的静态属性和常量以及本地方法栈中的对象。从这几种对象依次向下搜索,如果没有能达到 Roots  节点的对象就是垃圾对象,就说明可以被回收。

如下图所有,对象 A,B,C都能找到与 Roots 节点的联系,但是对象 D,E,F 三个并不能找到与 Roots 节点的联系,也就是不可达,所以 DEF  这三个对象就是垃圾对象。

有哪些Java GC的相关问题

什么时候回收

上面的两种方案解决了哪些对象能被回收,那么下个问题,就是什么时候进行垃圾回收呢?在排除人为调用的时候,垃圾回收都是发生在为新生对象进行内存分配的时候,这个时候如果内存空间不足就会触发  GC 进行垃圾回收。

怎么回收

上面我们知道了哪些对象可以被回收,也知道我们应该什么时候进行回收,那下面要解决的就是如何进行垃圾回收了。垃圾回收根据实现的方式不同有多种不同的算法实现。比如有标记清除算法,复制算法,标记整理算法,分代回收算法,下面简单介绍一下,想深入了解的可以自行去研究一下。

标记清除算法

标记清除算法很好理解,主要就是执行两个动作,一个是标记,另一个是对进行标记的对象内存进行清除回收。这个算法有个问题就是会出现内存碎片化严重。如下图所示:

有哪些Java GC的相关问题

从上图中可以看到,在进行内存回收后出现了严重的内存碎片化,这就导致在分配某些大对象的时候仍然会出现内存不够的情况,但是总体内存确是够的。

复制算法

复制算法的实现方式比较简洁明了,就是霸道的把内存分成两部分,在平时使用的时候只用其中的固定一份,在当需要进行 GC  的时候,把存活的对象复制到另一部分中,然后将已经使用的内存全部清理掉。如下图:

有哪些Java GC的相关问题

从上图可以看到解决了标记清除的内存碎片化问题,但是很明显复制算法有另一个问题,那就是内存的使用率大大下降,能使用的内存只有原来的一半了。

标记整理算法

既然标记清除和复制算法各有优缺点,那自然的我们就想到是否可以把这两种算法结合起来,于是就出现了标记整理算法。标记阶段是标记清除算法一样,先标记出需要回收的部分,不过清除阶段不是直接清除,而是把存活的对象往内存的一端进行移动,然后清除剩下的部分。如下图:

有哪些Java GC的相关问题

标记整理的算法虽然可以解决上面两个算法的一些问题,但是还是需要先进行标记,然后进行移动,整个效率还是偏低的。

分代回收算法

分代回收算法是目前使用较多的一种算法,这个不是一个新的算法,只是将内存进行的划分,不同区域的内存使用不同的算法。根据对象的存活时间将内存的划分为新生代和老年代,其中新生代包含  Eden 区和 S0,S1。在新生代中使用是复制算法,在进行对象内存分配的时候只会使用 Eden 和 S0 区,当发生 GC 的时候,会将存活的对象复制到 S1  区,然后循环往复进行复制。当某个对象在进行了 15 次GC  后依旧存活,那这个对象就会进入老年代。老年代因为每次回收的对象都会比较少,因此使用的是标记整理算法。

垃圾回收器

讲完了垃圾回收算法,我们再看下垃圾回收器,每一种垃圾回收器都是不同时代的不同产物,都有其独特性。

  • Serial 垃圾收集器(单线程、复制算法)

  • ParNew垃圾收集器(Serial+多线程)

  • Parallel Scavenge 收集器(多线程复制算法、高效)

  • SerialOld收集器(单线程标记整理算法)

  • ParallelOld收集器(多线程标记整理算法)

  • CMS收集器(多线程标记清除算法)

  • G1收集器

各个垃圾收集器的配合使用情况可以参考下图,个人觉得对这么多的收集器没有必要全部精通,可以注重关注一下 CMS 和 G1  就可以了。感兴趣的小伙伴可以自己的研究一下。

有哪些Java GC的相关问题

到此,关于“有哪些Java GC的相关问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 有哪些Java GC的相关问题

本文链接: https://www.lsjlt.com/news/283400.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 有哪些Java GC的相关问题
    这篇文章主要介绍“有哪些Java GC的相关问题”,在日常操作中,相信很多人在有哪些Java GC的相关问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些Java GC的相关问题”的疑惑有所帮助!接下来...
    99+
    2023-06-16
  • java技术相关问题有哪些
    这篇文章主要介绍“java技术相关问题有哪些”,在日常操作中,相信很多人在java技术相关问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java技术相关问题有哪些”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-03
  • Node.js的相关问题有哪些
    本篇内容主要讲解“Node.js的相关问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js的相关问题有哪些”吧!1. Node诞生于哪一年?N...
    99+
    2024-04-02
  • Spark的相关问题有哪些
    这篇文章主要介绍“Spark的相关问题有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spark的相关问题有哪些”文章能帮助大家解决问题。1、Spark的核心是什么  RDD是Spark的基本抽...
    99+
    2023-06-02
  • phyon相关问题有哪些
    这篇文章主要讲解了“phyon相关问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“phyon相关问题有哪些”吧!1.python是什么?Python是用来编写应用程序的高级编程语言。...
    99+
    2023-06-02
  • vsftpd相关问题有哪些
    本篇内容介绍了“vsftpd相关问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Q1) 求助!vsftpd显示的是GMT时间,而不是...
    99+
    2023-06-16
  • 与MySQL FQA相关的问题有哪些
    本篇内容介绍了“与MySQL FQA相关的问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.dr...
    99+
    2024-04-02
  • ADO.NET参数相关问题有哪些
    这篇文章主要介绍“ADO.NET参数相关问题有哪些”,在日常操作中,相信很多人在ADO.NET参数相关问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO.NET参数相关问题有哪些”的疑惑有所帮助!...
    99+
    2023-06-17
  • CSS if条件相关问题有哪些
    这篇文章主要介绍“CSS if条件相关问题有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS if条件相关问题有哪些”文章能帮助大家解决问题。 1.区别I...
    99+
    2024-04-02
  • 有关Java反射的问题有哪些
    这篇文章主要讲解了“有关Java反射的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有关Java反射的问题有哪些”吧!反射可以修改final类型成员变量吗final我们应该都知道,...
    99+
    2023-06-15
  • Fedora Core 3安装相关的问题有哪些
    这篇文章主要为大家展示了“Fedora Core 3安装相关的问题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Fedora Core 3安装相关的问题有哪些”这篇文章吧。KDE or X...
    99+
    2023-06-16
  • Java Double相加出现的问题有哪些
    这篇文章主要介绍“Java Double相加出现的问题有哪些”,在日常操作中,相信很多人在Java Double相加出现的问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java&...
    99+
    2023-06-22
  • 数据库主键相关问题有哪些
    这篇文章主要讲解了“数据库主键相关问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库主键相关问题有哪些”吧!1 是否每张表都应该有自增主键?不一定自增主键可以加快行的插入速度,对...
    99+
    2023-06-27
  • OpenSUSE网络设置相关问题有哪些
    小编给大家分享一下OpenSUSE网络设置相关问题有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!我的ip,dns,默认网关以及子掩网关等在xp中都有了,但是在opensuse中,设置好了,不能上学校网页。 现在把图贴...
    99+
    2023-06-16
  • mysql相关的面试题有哪些
    本篇内容介绍了“mysql相关的面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. MYISA...
    99+
    2024-04-02
  • ADO.NET连接池相关注意问题有哪些
    本篇内容介绍了“ADO.NET连接池相关注意问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ADO.NET连接池是Data Prov...
    99+
    2023-06-17
  • Python有哪些相关面试题
    本篇内容介绍了“Python有哪些相关面试题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“Python有哪些相关面试题”的内容就介绍到这里...
    99+
    2023-06-17
  • Vue相关面试题有哪些
    小编给大家分享一下Vue相关面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!0.那你能讲一讲MVVM吗?MVVM是Model-View-ViewMode...
    99+
    2023-06-14
  • Laravel相关面试题有哪些
    小编给大家分享一下Laravel相关面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1) 什么是 Laravel Laravel 是一个开源的、广泛使用...
    99+
    2023-06-14
  • Handler相关面试题有哪些
    本篇内容主要讲解“Handler相关面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Handler相关面试题有哪些”吧!获取Message实例的方式有哪些?哪一种更好?获取Messag...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作