问题:请讲下在java中有哪些垃圾回收算法

分析:该问题主要考察对java中垃圾回收的算法以及使用场景

回答要点:

主要从以下几点去考虑,

1、GC回收算法有哪些

2、每种算法的使用场景

3、基于垃圾回收算法有哪些垃圾回收器

在《java面试一日一题:如何判断一个对象是否为垃圾对象》中知道了java中判断一个对象是否存活,是否可被回收使用的是可达性分析算法,找出了可回收的对象,那么有哪些回收算法可以回收这些对象那

复制算法

复制算法就是从一个地方复制到另外一个地方,针对垃圾回收来说,就是把活着的对象复制到另外一块内存区域,然后之前的内存区域中的对象便可以被回收。在同等大小内存前提下,复制算法的内存使用率比较低,因为它会把内存分为两个部分,如下图

复制算法-回收前

复制算法-回收后

标记-清除算法

标记-清除算法,首先是一个标记的过程,也就是标记出哪些对象是垃圾,然后进行清除操作。该算法不需要像复制算法似的,把内存分为两部分,它可以利用整块的内存,在内存利用率上是没有问题的,但是容易产生内存碎片,随着内存的回收,可能在内存中就不存在整块的大内存,在分配需要连续空间的大对象(数组)时就会发生OOM。如下图

标记清除-算法前

标记清除-算法后

从上图可以看到在使用标记-清除算法后,被标记为垃圾的对象被回收了,释放了内存空间,但是内存中存在了一个隔一个的空,也就是内存碎片,这时如果要分配一个连续的大空间,可能有无法找到空间的情况,发生OOM。

另外,使用标记-清除算法,在进行内存分配的时候采用的内存分配算法一定是空闲列表法。

标记-整理/压缩算法

标记-整理/压缩,是在标记清除的基础上加了一个内存整理的过程,是为了消除内存碎片的,如下图

标记-整理前

标记-整理后

从上图可以看出,使用标记整理算法后内存是规整的,解决了标记-清除算法中内存碎片的问题,但是多了一个内存整理的过程。

分代算法

分代算法,其实不能算是一个垃圾回收的算法,可以理解为一种垃圾回收的方案,即把内存分为不同的块也即代,每一块使用不同的垃圾回收算法。现代主流的垃圾回收器都是使用分代的思想,如下图

上图即是分代算法的示意图,把堆区分为新生代和老年代,新生代又分为Eden S0 S1;新生代使用复制算法,老年代使用标记-清除/标记-整理算法。

有不当之处,欢迎指正,谢谢

java面试一日一题:java中垃圾回收算法有哪些的更多相关文章

  1. java面试一日一题:java中的垃圾回收器

    问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...

  2. java面试一日一题:mysql中常用的存储引擎有哪些?

    问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...

  3. java面试一日一题:讲下mysql中的undolog

    问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...

  4. java面试一日一题:讲下在什么情况下会发生类加载

    问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...

  5. java面试一日一题:再谈垃圾回收器中的串行、并行、并发

    问题:请讲下java中垃圾回收器的串行.并行.并发 分析:该问题主要考察在垃圾回收过程中垃圾回收线程和用户线程的关系 回答要点: 主要从以下几点去考虑, 1.串行.并行.并发的概念 2.如何考虑串行. ...

  6. java面试一日一题:如何设计一款垃圾回收器

    问题:如果让你设计一个垃圾回收器,你会考虑哪些问题 分析:该问题主要考察对java中垃圾回收器的理解,要理解怎么回收:一款好的垃圾回收器有哪些衡量指标 回答要点: 主要从以下几点去考虑, 1.垃圾回收 ...

  7. 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类

    不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...

  8. java面试官最爱问的垃圾回收机制,这位阿里P7大佬分析的属实到位

    前言 JVM 内存模型一共包括三个部分: 堆 ( Java代码可及的 Java堆 和 JVM自身使用的方法区). 栈 ( 服务Java方法的虚拟机栈 和 服务Native方法的本地方法栈 ) 保证程序 ...

  9. Java虚拟机运行时数据区域及垃圾回收算法

    程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空). Java 虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表.操作数栈.动态链接.方法出口 ...

随机推荐

  1. 让你的浏览器变成Siri一样的语音助手

    最近业余时间浏览技术文章的时候,看到了一篇关于语音朗读的文章:Use JavaScript to Make Your Browser Speak(用Javascript让你的浏览器说话),文章中提到可 ...

  2. Java基础知识-简明阐述双亲委派机制及作用

    1.双亲委派机制及作用 1.1 什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类 ...

  3. 2021精选 Java面试题附答案(一)

    1.什么是Java Java是一门面向对象的高级编程语言,不仅吸收了C++语言的各种优点,比如继承了C++语言面向对象的技术核心.还摒弃了C++里难以理解的多继承.指针等概念,,同时也增加了垃圾回收机 ...

  4. JMeter元件作用域实践指南

    从一个问题说起 对于以下测试脚本: 为了能调用进入房间接口,需要从考场接口获取考场token.为了调用考场接口,需要从登陆接口获取登陆token.元件说明如下: 学生登录,提取登录${token}传入 ...

  5. A. 【例题1】奶牛晒衣服

    A . [ 例 题 1 ] 奶 牛 晒 衣 服 A. [例题1]奶牛晒衣服 A.[例题1]奶牛晒衣服 关于很水的题解 既然是最少时间,那么就是由最湿的衣服来决定的.那么考虑烘干机对最湿的衣服进行操作 ...

  6. AOE网与关键路径

    声明:图片及内容基于https://www.bilibili.com/video/BV1BZ4y1T7Yx?from=articleDetail 原理 AOE网 关键路径 数据结构 核心代码 Topo ...

  7. sqlserver 计算同比,环比增长

    /****** Script for SelectTopNRows command from SSMS ******/ SELECT [fdSequenceID] ,[fdInnerTime] ,[f ...

  8. (十一)VMware Harbor 配置管理

    VMware Harbor 配置管理 这篇主要学习一下,项目下的配置管理. 主要功能就是修改项目的访问权限 当将访问权限改为

  9. Jmeter接口测试-MD5加密-请求验签(完整流程)

    第一部分:先准备好Jmeter 1.在开始编写脚本之前,先要确保你的Jmeter能够正常运行.若你还没有安装Jmeter,可参考以下方法: A.Jmeter需要java运行环境,所以需要下载JDK,J ...

  10. JDBC_08_解决SQL注入问题 (登录和注册)

    解决SQL注入问题 只要用户提供的信息不参与sql语句的编译过程,那么尽管用户输入的信息中含有sql关键字那么也不会起作用了 要想使用户提供信息不参与sql语句的编译过程,那么必须使用 java.sq ...