面试知识汇总——垃圾回收器(分代收集算法)

分代收集算法

根据对象的存活周期,把内存分成多个区域,不同区域使用不同的回收算法回收对象。

对象在创建的时候,会先存放到伊甸园。当伊甸园满了之后,就会触发垃圾回收。

这个回收的过程是:把伊甸园中的对象拷贝到From survivor或者是To survivor里面去。如果第一次回收把对象拷贝到From survior里了,那么下一次回收就会把存活的对象从From survior拷贝到To survior,再下一次就会把To survior里的对象拷贝到From surivor,周而复始。那么不难发现,这个过程使用了复制算法,这也就是为什么新生代要有两个survior的原因。

那么对象每经历一次垃圾回收之后,那么还存活的话,他的年龄就会加一。当对象的年龄达到阈值的话(默认是15),就会晋升到老年代,老年代里的对象存活率是比较高的。

老年代一般是采用标记清除或者标记整理的思想进行回收。

新建的对象不一定会分配到伊甸园,也有可能直接分配到老年代,这里主要分为两种场景:

  1. 对象大于-XX:PretenureSizeThreshold(默认是0),就会直接分配到老年代
  2. 新生代空间不够,如果你的对象非常的大,比如是一个超大数组,新生代的空间根本不够,那么这个时候也会直接放到老年代。因为新生代采用的是复制算法,在伊甸园分配大对象的话将会导致伊甸园和两个survior区大量的内存拷贝。
  3. 对象不一定要达到年龄才进入老年代,虚拟机有一个动态年龄的概念,如果Survior空间中所有相同年龄大小的总和大于Survivor空间的一半,那么年龄大于等于该年龄的对象就可以直接进老年代。

触发条件(Minor GC、Full GC)

新生代(Minor GC)触发条件:伊甸园空间不足,就会进行Minor GC回收新生代

老年代(Full GC)触发条件:

  1. 老年代空间不足;
  2. 元空间不足;
  3. 要晋升老年代的对象所占用的空间大于老年代的剩余空间;
  4. 显式调用System.gc();
  5. 建议垃圾回收器执行垃圾回收:-XX: +DisableExplicitGC 参数,忽略掉System.gc()的调用;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/488144.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初识redis(一)

前言 引用的是这本书的原话 Redis[1]是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列…

Android15功能和 API 概览

Android 15 面向开发者引入了一些出色的新功能和 API。以下部分总结了这些功能,以帮助您开始使用相关 API。 如需查看新增、修改和移除的 API 的详细列表,请参阅 API 差异报告。如需详细了解新的 API,请访问 Android API 参考文档&#xff0…

Selenium 自动化 —— 定位页面元素

更多内容请关注我的 Selenium 自动化 专栏: 入门和 Hello World 实例使用WebDriverManager自动下载驱动Selenium IDE录制、回放、导出Java源码浏览器窗口操作切换浏览器窗口 使用 Selenium 做自动化,我们不仅仅是打开一个网页,这只是万里长…

Stable Diffusion 进阶教程 - 二次开发(制作您的文生图应用)

目录 1. 引言 2. 基于Rest API 开发 2.1 前置条件 2.2 代码实现 2.3 效果演示 2.4 常见错误 3. 总结 1. 引言 Stable Diffusion作为一种强大的文本到图像生成模型,已经在艺术、设计和创意领域引起了广泛的关注和应用。然而,对于许多开发者来说&#xff…

时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测

时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测(完整源码和数据…

DRC检查及丝印的调整

DRC检查及丝印的调整 综述:本文主要讲述AD软件中DRC检查、丝印的调整以及logo的添加的相关步骤,附加logo添加的脚本链接和大量操作图片,使步骤详细直观。 1. 点击“工具”→“设计规则检查”→“运行DRC”。(一开始可以只开启电…

利用云手机技术,开拓海外社交市场

近年来,随着科技的不断进步,云手机技术逐渐在海外社交营销领域崭露头角。其灵活性、成本效益和全球性特征使其成为海外社交营销的利器。那么,究竟云手机在海外社交营销中扮演了怎样的角色呢? 首先,云手机技术能够消除地…

LLM - 大语言模型的指令微调(Instruction Tuning) 概述

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137009993 大语言模型的指令微调(Instruction Tuning)是一种优化技术,通过在特定的数据集上进一步训练大型语言模型(LLMs)&a…

javaWeb个人日记(博客)管理系统

一、简介 在快节奏的生活中,记录生活点滴、感悟和思考是一种重要的方式。基于此,我设计了一个基于JavaWeb的个人日记本系统,旨在帮助用户轻松记录并管理自己的日记。该系统包括登录、首页、日记列表、写日记、日记分类管理和个人中心等功能&…

mysql - 缓存

缓存 InnoDB存储引擎在处理客户端的请求时,当需要访问某个页的数据时,就会把完整的页的数据全部加载到内存中,也就是说即使我们只需要访问一个页的一条记录,那也需要先把整个页的数据加载到内存中。将整个页加载到内存中后就可以…

命令模式(请求与具体实现解耦)

目录 前言 UML plantuml 类图 实战代码 模板 Command Invoker Receiver Client 前言 命令模式解耦了命令请求者(Invoker)和命令执行者(receiver),使得 Invoker 不再直接引用 receiver,而是依赖于…

Java基础--128陷阱

问题引入 Integer a 123; Integer b 123; System.out.println(ab); 结果为true。 但是如果代码如下 Integer a 1230;Integer b 1230;System.out.println(ab); 这个的结果就是false。 问题解决 当Integer a 123时,其实他底层自动转换成了Integer a Inte…

Learn OpenGL 29 延迟着色法

延迟着色法 我们现在一直使用的光照方式叫做正向渲染(Forward Rendering)或者正向着色法(Forward Shading),它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。它非常…

网络安全-文件包含

一、php://input 我们先来看一个简单的代码 <meta charset"utf8"> <?php error_reporting(0); $file $_GET["file"]; if(stristr($file,"php://filter") || stristr($file,"zip://") || stristr($file,"phar://&quo…

Windows如何搭建 ElasticSearch 集群

单机 & 集群 单台 Elasticsearch 服务器提供服务&#xff0c;往往都有最大的负载能力&#xff0c;超过这个阈值&#xff0c;服务器 性能就会大大降低甚至不可用&#xff0c;所以生产环境中&#xff0c;一般都是运行在指定服务器集群中。 除了负载能力&#xff0c;单点服务器…

Redis到底是多线程还是单线程?

Redis6.0之前&#xff1a;是单线程模式。 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。 Redis6.0之前&#xff1a;单线程 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。

iOS开发进阶(九):OC混合开发嵌套H5应用并互相通信

文章目录 一、前言二、嵌套H5应用并实现双方通信2.1 WKWebView 与JS 原生交互2.1.1 H5页面嵌套2.1.2 常用代理方法2.1.3 OC调用JS方法2.1.4 JS调用OC方法 2.2 JSCore 实现原生与H5交互2.2.1 OC调用H5方法并传参2.2.2 H5给OC传参 2.3 UIWebView的基本用法2.3.1 H5页面嵌套2.3.2 …

面试算法-101-重排链表

题目 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交…

使用mid360从0开始搭建实物机器人入门级导航系统,基于Fast_Lio,Move_Base

Introduction 本文原本只是自己在拿到mid360后&#xff0c;开始进行开发过程的一些问题和学习的记录。毕竟实物和仿真还是有很多不同&#xff0c;且由于碰到的问题也比较多&#xff0c;READEME也越来越详细&#xff0c;所以就干脆整合起来&#xff0c;做成了一篇使用mid360的搭…

python、execl数据分析(数据描述)

一 python 1.各函数 1.1python库的安装与导入 #pip install os#pip install matplotlib#pip install seaborn#pip install scikit-learn#pip install scipy#修 改 工 作 目 录import osos.getcwd () # 查看当前工作环境os.chdir( F :\my course\database ) # 修改工作环境o…
最新文章