面试中如何回答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。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python中的map(python中的insert函数)

    list(map(fun,your_list))

    2022年4月13日
    57
  • python 读写txt文件乱码问题

    从报错讲起:UnicodeDecodeError:’gbk’codeccan’tdecodebyte0xaainposition2:illegalmultibytesequence出现这个错误一般是由于打开文件时,没有指定编码引起的,比如下面代码withopen(‘../corpus.txt’,mode=’r’)asf:解决方法很简单,为其指定…

    2022年4月8日
    208
  • 我的博客文章快速索引[通俗易懂]

    我的博客文章快速索引[通俗易懂]授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。    为了方便大家了解最新博客内容,博哥在此置顶汇总贴,方便大家查阅所需内容。    此贴,大家可以看到博哥近期的进展情况:待写(计划写中)目前正在写(表示已经有初稿)期待中(表示正在考虑)一、你如果想学基于Arduino的E…

    2022年5月29日
    30
  • Spring全家桶之SpringSession「建议收藏」

    Spring全家桶之SpringSession「建议收藏」SpringSession和SpringSessionMongoDB相关的实用知识的整理,希望能够帮助更多人~~~

    2022年10月16日
    3
  • goland 2022.01 激活码_最新在线免费激活2022.01.29

    (goland 2022.01 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月31日
    102
  • IT学生学习指南

    IT学生学习指南本文主要为了计算机相关专业的学生而写。内容是从本博主的工作经验和教学经验当中总结出来的一些干货,涵盖了从大一到大四期间学生所遇到的常见问题,包括如何找到满意的工作、如何选择适合自己的工作岗位、如何制定自己的学习计划、如何分辨自身适合考研还是就业、女生的IT之路怎么走、如何锻炼自己的技术等等大学生最关心的问题。如果大家觉得文本值得一看,那就请推荐给身边那些还在迷茫中的孩子们吧!

    2022年6月4日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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