java面试一日一题:java中垃圾回收算法有哪些
问题:请讲下在java中有哪些垃圾回收算法
分析:该问题主要考察对java中垃圾回收的算法以及使用场景
回答要点:
主要从以下几点去考虑,
1、GC回收算法有哪些
2、每种算法的使用场景
3、基于垃圾回收算法有哪些垃圾回收器
在《java面试一日一题:如何判断一个对象是否为垃圾对象》中知道了java中判断一个对象是否存活,是否可被回收使用的是可达性分析算法,找出了可回收的对象,那么有哪些回收算法可以回收这些对象那
复制算法
复制算法就是从一个地方复制到另外一个地方,针对垃圾回收来说,就是把活着的对象复制到另外一块内存区域,然后之前的内存区域中的对象便可以被回收。在同等大小内存前提下,复制算法的内存使用率比较低,因为它会把内存分为两个部分,如下图
复制算法-回收前
复制算法-回收后
标记-清除算法
标记-清除算法,首先是一个标记的过程,也就是标记出哪些对象是垃圾,然后进行清除操作。该算法不需要像复制算法似的,把内存分为两部分,它可以利用整块的内存,在内存利用率上是没有问题的,但是容易产生内存碎片,随着内存的回收,可能在内存中就不存在整块的大内存,在分配需要连续空间的大对象(数组)时就会发生OOM。如下图
标记清除-算法前
标记清除-算法后
从上图可以看到在使用标记-清除算法后,被标记为垃圾的对象被回收了,释放了内存空间,但是内存中存在了一个隔一个的空,也就是内存碎片,这时如果要分配一个连续的大空间,可能有无法找到空间的情况,发生OOM。
另外,使用标记-清除算法,在进行内存分配的时候采用的内存分配算法一定是空闲列表法。
标记-整理/压缩算法
标记-整理/压缩,是在标记清除的基础上加了一个内存整理的过程,是为了消除内存碎片的,如下图
标记-整理前
标记-整理后
从上图可以看出,使用标记整理算法后内存是规整的,解决了标记-清除算法中内存碎片的问题,但是多了一个内存整理的过程。
分代算法
分代算法,其实不能算是一个垃圾回收的算法,可以理解为一种垃圾回收的方案,即把内存分为不同的块也即代,每一块使用不同的垃圾回收算法。现代主流的垃圾回收器都是使用分代的思想,如下图
上图即是分代算法的示意图,把堆区分为新生代和老年代,新生代又分为Eden S0 S1;新生代使用复制算法,老年代使用标记-清除/标记-整理算法。
有不当之处,欢迎指正,谢谢
java面试一日一题:java中垃圾回收算法有哪些的更多相关文章
- java面试一日一题:java中的垃圾回收器
问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...
- java面试一日一题:mysql中常用的存储引擎有哪些?
问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...
- java面试一日一题:讲下mysql中的undolog
问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...
- java面试一日一题:讲下在什么情况下会发生类加载
问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...
- java面试一日一题:再谈垃圾回收器中的串行、并行、并发
问题:请讲下java中垃圾回收器的串行.并行.并发 分析:该问题主要考察在垃圾回收过程中垃圾回收线程和用户线程的关系 回答要点: 主要从以下几点去考虑, 1.串行.并行.并发的概念 2.如何考虑串行. ...
- java面试一日一题:如何设计一款垃圾回收器
问题:如果让你设计一个垃圾回收器,你会考虑哪些问题 分析:该问题主要考察对java中垃圾回收器的理解,要理解怎么回收:一款好的垃圾回收器有哪些衡量指标 回答要点: 主要从以下几点去考虑, 1.垃圾回收 ...
- 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类
不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...
- java面试官最爱问的垃圾回收机制,这位阿里P7大佬分析的属实到位
前言 JVM 内存模型一共包括三个部分: 堆 ( Java代码可及的 Java堆 和 JVM自身使用的方法区). 栈 ( 服务Java方法的虚拟机栈 和 服务Native方法的本地方法栈 ) 保证程序 ...
- Java虚拟机运行时数据区域及垃圾回收算法
程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空). Java 虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表.操作数栈.动态链接.方法出口 ...
随机推荐
- 程序员必须搞懂的20个Java类库和API
本文总结了日志.JSON解析.单测.XML解析.字节码处理.数据库连接池.集合类.邮件.加密.嵌入式SQL数据库.JDBC故障诊断以及序列化等20个方面的常用类库.都是你日常开发经常可能要用到的,现在 ...
- CCPC-2020 黑龙江省赛——Let’s Get Married
题意:~~ 思路:题目给出的数字太少了,我们多写几个,就会发现每层最左边的值等于1.2*k(k+1) ,k代表层数,找规律发现如果一个点的坐标为2.(x,y)且|a|+|b|=k,id<=2*k ...
- P1540_机器(JAVA语言)
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...
- PTA 求二叉树的深度
6-7 求二叉树的深度 (6 分) 本题要求实现一个函数,可返回二叉树的深度. 函数接口定义: int Depth(BiTree T); T是二叉树树根指针,函数Depth返回二叉树的深度,若树为 ...
- 面试准备——计算机网络(http)
一.各种协议与HTTP协议之间的关系 二.URI(统一资源标识符) URI用字符串标识某一互联网资源. URI的格式: 协议方案名:指定访问资源时使用的协议类型. 登录信息(认证):可选,指定用户名和 ...
- 阅读作业2&CI/CD调研
说明 项目 内容 这个作业属于哪个课程 2021春季软件工程 (罗杰 任健) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 初步获得软件工程师的能力 这个作业在哪个具体方面帮助我实现目 ...
- Unity2D项目-平台、解谜、战斗! 0.2 序言:团队在线协作方案、基线控制
各位看官老爷们,这里是RuaiRuai工作室,一个做单机游戏的兴趣作坊. 本文跟大家聊一下笔者团队中所使用的在线协作的诸多工具,以及使用这些工具的目的和所记录的内容,希望这些内容在大家团队工作中有所帮 ...
- MySQL数据库高级四:工具拾遗(视图)
视图
- 浅谈 Fresco 框架结构
在前面的文章 Fresco 源码分析 -- 图片加载流程 里面详细说明了图片加载的整个流程,但是除了理解源码之外,对于源码的框架层面的设计也是需要去了解的,不能只是简单的读源码,好的源码的框架设计也是 ...
- IDEA使用JFX的相关问题
1 问题概述 首先是javafx找不到对应的类: 其次是 class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x50f362 ...