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

news2024/11/15 20:35:15

分代收集算法

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

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

这个回收的过程是:把伊甸园中的对象拷贝到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.coloradmin.cn/o/1544958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python私有属性和私有方法

私有属性和私有方法 在实际开发中,对象的某些属性或者方法只希望在对象内部被使用,而不希望在外界被访问。 私有属性:对象不希望公开的属性 私有方法:对象不希望公开的方法 定义方式:在属性名或者方法名前添加两个下划…

计算机网络常见题(持续更新中~)

1 描述一下HTTP和HTTPS的区别 2 Cookie和Session有什么区别 3 如果没有Cookie,Session还能进行身份验证吗? 4 BOI,NIO,AIO分别是什么 5 Netty的线程模型是怎么样的 6 Netty是什么?和Tomcat有什么区别,特点是什么? 7 TCP的三次…

基于SpringBoot+MyBatis网上点餐系统

采用技术 基于SpringBootMyBatis网上点餐系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 功能列表 前台首页功能 用户注册 用户登录 用户功能 …

【python】flask各种版本的项目,终端命令运行方式的实现

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

2-Flume之Sink与Channel

Flume Sink HDFS Sink 将数据写到HDFS上。数据以文件形式落地到HDFS上,文件名默认是以FlumeData开头,可以通过hdfs.filePrefix来修改 HDFS Sink默认每隔30s会滚动一次生成一个文件,因此会导致在HDFS上生成大量的小文件,实际过程…

人工智能 框架 paddlepaddle 飞桨 使用指南 使用例子 线性回归模型demo 1

安装过程&使用指南&线性回归模型 使用例子 本来预想 是安装 到 conda 版本的 11.7的 但是电脑没有gpu 所以 安装过程稍有变动,下面简单讲下 conda create -n paddle_env117 python=3.9 由于想安装11.7版本 py 是3.9 所以虚拟环境名称也是 paddle_env117 activa…

各种排序介绍

1.排序的概念 排序 :所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排…

【沐风老师】3DMAX样条线皮肤SplineSkin插件使用方法详解

3DMAX样条线皮肤SplineSkin插件使用方法 3DMAX样条线皮肤插件SplineSkin,将3D物体一键转化为样条线包裹形状的插件,适用于科研绘图和艺术设计等相关领域。 【适用版本】 3dMax2015及更高版本(教程编写于2024,但适用不仅限于此范围…

LeetCode 面试经典150题 392.判断子序列

题目: 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"…

SQL复习专题

请结合B站-技术蛋老师 视频学习 核心语法 一、增:数据库/表格 create create database 数据库名;#创建表(列名类型) mysql> create table eggs_record(-> id int,-> egg_name varchar(10),-> sold date-> ); 这…

【前端】代码案例

1.猜数字 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>猜数字</title> </head> <…

Flutter 旋转动画 线性变化的旋转动画

直接上代码 图片自己添加一张就好了 import dart:math;import package:flutter/material.dart;import package:flutter/animation.dart;void main() > runApp(MyApp()); //旋转动画 class MyApp extends StatelessWidget {overrideWidget build(BuildContext context) {re…

Luminar Neo:重塑图像编辑新纪元,Mac与Win双平台畅享创意之旅

在数字时代的浪潮中&#xff0c;图像编辑软件已成为摄影师和设计师们不可或缺的创作工具。Luminar Neo&#xff0c;作为一款专为Mac与Windows双平台打造的图像编辑软件&#xff0c;正以其卓越的性能和创新的编辑功能&#xff0c;引领着图像编辑的新潮流。 Luminar Neo不仅继承…

SOC 子模块---中断控制器

中断控制器对soc 中的各个外设进行中断管理&#xff0c;进行优先权排队&#xff0c;并送出IQR信号给CPU&#xff1b; 中断控制器在整个系统中的结构&#xff1a; IRQ<n>来源于不同的中断源&#xff0c;比如&#xff1a;I2C,SPI等&#xff0c;INTC收集这些中断&#xff0…

word文件如何转PDF格式?word转PDF的方法

在当今数字化时代&#xff0c;文档格式的转换已成为日常生活和工作中不可或缺的一部分。其中&#xff0c;将Word文档转换为PDF格式更是受到了广大用户的青睐。本文将详细介绍Word转PDF的方法&#xff0c;帮助读者轻松实现文档格式的转换&#xff0c;并探讨转换过程中的注意事项…

P6技巧:对计划执行纠偏措施

前言 对施工计划的滞后原因分析&#xff0c;通常采取由大到小、由高到低的方法。即首先查看总体进度偏差&#xff0c;再分析其偏差主要来源于哪部分。 项目进度评估与偏差控制 项目实施过程中&#xff0c;项目控制人员应对进度实施情况进行跟踪、采集数据&#xff0c;并根据…

图解Kafka架构学习笔记(二)

kafka的存储机制 https://segmentfault.com/a/1190000021824942 https://www.lin2j.tech/md/middleware/kafka/Kafka%E7%B3%BB%E5%88%97%E4%B8%83%E5%AD%98%E5%82%A8%E6%9C%BA%E5%88%B6.html https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html https://feiz…

数据可视化基础与应用-04-seaborn库从入门到精通01-02

总结 本系列是数据可视化基础与应用的第04篇seaborn&#xff0c;是seaborn从入门到精通系列第1-2篇。本系列的目的是可以完整的完成seaborn从入门到精通。主要介绍基于seaborn实现数据可视化。 参考 参考:数据可视化-seaborn seaborn从入门到精通01-seaborn介绍与load_datas…

CharacterController.Move called on inactive controller

【问题背景】 Unity3D中开发物体的移动&#xff0c;实现代码如下&#xff1a; public class TargetController : MonoBehaviour {private CharacterController character;private float speedRate 4f;private void Start(){character GetComponent<CharacterController&…

等保测评密评对照:一文看懂两者差异

最近&#xff0c;在去几个客户的办公室交流的方案的时候&#xff0c;都会被重点问到网络安全问题,在方案中“等保”是如何体现和落实的。而且有些客户的领导也会提到“密评”与“等保”如何衔接&#xff0c;是否有先后顺序&#xff0c;可否同时进行测评等问题。 关于“等保”与…