面试中如何回答JVM垃圾回收机制[通俗易懂]

面试中如何回答JVM垃圾回收机制[通俗易懂]JVM中的垃圾回收了解吗首先是如何标记存活对象,主要有两个算法,分别是引用计数法和可达性分析算法。引用计数法:给一个对象添加一个引用计数器,当一个地方引用它时,计算器+1,不引用的时候-1,当引用计数器为0时说明该对象可回收。但是一旦出现互相引用的情况,就会出现无法回收的现象。所以JVM采用的是可达性分析算法。可达性分析算法:首先会标记所有GCroot能够直接关联的对象。GCro…

大家好,又见面了,我是你们的朋友全栈君。

JVM中的垃圾回收了解吗

首先是如何标记存活对象,主要有两个算法,分别是引用计数法和可达性分析算法。

  • 引用计数法:给一个对象添加一个引用计数器,当一个地方引用它时,计算器+1,不引用的时候-1,当引用计数器为0时说明该对象可回收。但是一旦出现互相引用的情况,就会出现无法回收的现象。所以JVM采用的是可达性分析算法。

  • 可达性分析算法:首先会标记所有GC root能够直接关联的对象。GC root能够直接关联的对象包含:Java虚拟机栈中引用的对象,本地方法栈中引用的对象,方法区中静态变量引用的对象和常量池中引用的对象。然后,再进行GC root 的tracing,标记GC root间接关联的对象。

标记完存活对象之后便是是进行垃圾回收,垃圾回收算法主要有三种:标记清除、标记整理、标记复制

  • 标记清除:标记存活的对象,然后将垃圾对象直接清除,优点是清除效率高,缺点是内存碎片多

  • 标记整理:标记存活的对象,然后将存活的地方移动到一个连续的区域,将该区域外的对象全部清除。缺点是需要移动对象,清除效率比标记清除低。优点是不会产生内存碎片。

  • 标记复制:将内存区域分成两个部分,标记存活的对象,将存活的对象复制到另外一个区域,然后将本区域全部清除。缺点是空间利用率不高

JVM垃圾回收机制采用的分代回收,新生代的垃圾回收采用的是标记复制算法,老年代的垃圾回收采用的是标记清除或者标记整理算法。

大多数情况下,对象在新生代Eden区上进行分配,大对象则直接分配到老年代。当Eden区空间不够时,则需要发起Minor GC清理垃圾对象。当对象经过Minor GC依然存活,将移动到Survivor中,年龄+1,增加到一定年龄则移动到老年代中。如果在survivor区中相同年龄的所有对象大小大于survivor空间的一半,则大于或等于该年龄的对象直接进入老年代,无需等到MaxTenuringThreshold中要求的年龄。当老年代空间不足时会进行Full GC。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138578.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据结构与算法学习笔记

    本文是王争老师的《算法与数据结构之美》的学习笔记,详细内容请看王争的专栏。有不懂的地方指出来,我做修改。数据结构与算法思维导图数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一组方法”。数据结构是为算法服务的,算法是要作用再特定的数据结构上的。最常用的数据结构预算法:数据结构:数组、链表、栈、队列、散列表、二叉树‘、堆、跳表、图、Tire树 算法:递归…

  • pycharm2021.11.3激活教程【中文破解版】「建议收藏」

    (pycharm2021.11.3激活教程)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html6EK6WKOHUX-eyJsaWNlbnNlSWQi…

  • 国外全能免费主页空间

    国外全能免费主页空间国外全能免费主页空间,支持ASP.NET、PHP、CGI等 [来源:不详|作者:佚名|时间:2007-6-622:19:28|收藏本文]   WebHostforASP.NET提供15M免费主页空间,每月2G的流量限制,web方式上传管理文件,支持ASP、ASP.NET、PHP、Perl、CGI以及Access数据库,无广告。必须拥有顶级域名才能申请,如果您手头上有空

  • IIS Express ArgumentOutOfRangeException

    IIS Express ArgumentOutOfRangeException

  • Ubuntu安装和配置ssh

    Ubuntu安装和配置ssh因为配置pypbc环境,需要windows系统下PycharmSSH连接虚拟机python环境1.安装ssh服务器sudoaptinstallopenssh-server2.安装ssh客

  • c语言createthread函数用法,CreateThread函数「建议收藏」

    c语言createthread函数用法,CreateThread函数「建议收藏」当使用CreateProcess调用时,系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做例如以下步骤:1在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回2把线程退出码置为STILL_ACTIVE。把线程挂起计数置13分配context结构4分配两页的物理存储以准备栈。保护页设置为PAGE_READWRITE。第2页设为PA…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号