情景:你接到xx公司面试邀请,你怀着激动忐忑的心坐在对方公司会议室,想着等会的技术面试。技术总监此时走来,与你简单交谈后....

技术:你对GC垃圾回收机制了解的怎么样?

你:还行,有简单了解过。

技术:那我考考你...

一、GC全称

答:Garbage Collector(垃圾收集器)

二、GC有什么用?(垃圾回收的目的)

答:主要就是为了提高内存利用率

三、GC回收哪些垃圾?

答:只回收“托管堆中的内存资源”,没有引用的对象。不回收“栈”上的资源(比如值类型)。

四、什么时候回收?

答:不确定,当程序需要新内存的时候执行回收。

五、GC垃圾回收机制(重点!)

答:引入“代”的概念,

①总共有三代,0~2代。

②每次新建对象都在第0代中。

③每代有固定大小。

图解:新建了a、b、c、d四个对象,第0代内存满了,但此时又新建了一个e对象,那这个时候会发生什么?e对象会被放在哪里?1代里吗?还是2代?

错!不会放在1代里,也不会放在2代里。这个时候会触发“垃圾回收”,CLR会去遍历这a、b、c、d这四个对象,打上标记。假设a和b对象已经没有被引用了,c和d还在被引用,那a和b就会被当做垃圾回收掉,c和d就会被放到1代里,e也就进入0代了。

进过GC回收后,就变成了下面这样:

如此往复。

备注:这个叫“自动回收”,肯定有小朋友会问,那是不是可以手动回收。答案是肯定的,比如析构函数就可以达到这个目的。还不知道什么是“析构函数”的小朋友,请偷偷出门去自行百度。

六、弱引用

人就是这样,得不到的永远在骚动,得到的有恃无恐。当失去了,才追悔莫及。假如对象要被回收了,但是我又想再次用这个对象,该怎么办?这个时候就出来了这个--“弱引用”。

为什么需要弱对象呢?因为,有一些数据创建起来很容易,但是却需要很多内存。

例如:有一个程序需要去访问用户硬盘上的所有文件夹和文件名;你可以在程序第一次需要这个数据时访问用户磁盘生成一次数据,数据生成之后你就可以访问内存中的数据来得到用户文件数据,而不是每次都去读磁盘获得数据,这样做可以提升程序的性能。

你可以这么理解,你跟你女朋友闹分手,微信电话什么的全部删除了,但是还留着QQ,以后想要联系,可以通过这个QQ来联系,而此时的这个QQ,就相当于是弱引用了。至于为什么分手了还要联系,这个原因也就是为什么要有弱引用的原因了~

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

结尾:以上都是我个人的一些粗略见解,专业术语长篇大论可能看的晕头转向,所以有了这个通俗易懂版,适合没有怎么接触过GC这一块的小白,初衷还是为了帮助新手能应付面试。但是实际使用的话,还是要多去看看专业的资料文档。您要是觉得有用,您就看看,然后自己再多去查查相关资料,加深理解。您要是觉得没有用,那也就笑笑翻过去了。

祝大家工作顺利,诸事顺遂!可以的话~给我点个赞呗(狗头)

通俗易懂.NET GC垃圾回收机制(适用于小白面试,大牛勿喷)的更多相关文章

  1. JVM和GC垃圾回收机制和内存分配

    JVM运行期间 线程共享 线程私有 线程共享: 方法区 堆方法区:存放可以共享数据,静态常量,类的共有方法属性字段等,可以共享的存在方法区. 堆:存放class对象 . 线程私有:本地方法栈 虚拟机栈 ...

  2. JVM架构和GC垃圾回收机制

    深入理解系列之JDK8下JVM虚拟机(1)——JVM内存组成 https://blog.csdn.net/u011552404/article/details/80306316 JVM架构和GC垃圾回 ...

  3. java面试题之----JVM架构和GC垃圾回收机制详解

    JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...

  4. 面试官,不要再问我“Java GC垃圾回收机制”了

    Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底层原理,图文并茂,突破学习及面试瓶颈. 楔子-JVM内存结构补充 在上篇<JVM之内存结构详解> ...

  5. 乐字节Java|GC垃圾回收机制、package和import

    本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...

  6. GC垃圾回收机制详解

    JVM堆相关知识    为什么先说JVM堆?  JVM的堆是Java对象的活动空间,程序中的类的对象从中分配空间,其存储着正在运行着的应用程序用到的所有对象.这些对象的建立方式就是那些new一类的操作 ...

  7. Android内存优化3 了解java GC 垃圾回收机制1

    开篇废话 如果我们想要进行内存优化的工作,还是需要了解一下,但这一块的知识属于纯理论的,有可能看起来会有点枯燥,我尽量把这一篇的内容按照一定的逻辑来走一遍.首先,我们为什么要学习垃圾回收的机制,我大概 ...

  8. C# GC 垃圾回收机制

    今天来谈谈C# 的GC ,也就是垃圾回收机制,非常的受教,总结如下 首先:谈谈托管,什么叫托管,我的理解就是托付C# 运行环境帮我们去管理,在这个运行环境中可以帮助我们开辟内存和释放内存,开辟内存一般 ...

  9. asp.net 之 GC (垃圾回收机制)

    今天抽时间好好整理了下GC相关知识,看了CSDN和博客园的几篇文章,有了一定的简单了解,决定根据个人理解整合一份随笔写下来,望诸位指教. 一:基础问题 1.首先需要知道了解什么是GC? GC如其名,就 ...

随机推荐

  1. W3C的盒子模型和IE的盒子模型

    盒子模型分为两种:W3C盒子模型(标准盒子模型)和IE盒子模型 盒子模型组成:content+padding+border+margin 标准盒子模型的width就是content 而IE盒子模型的w ...

  2. vue+webpack怎么分环境进行打包

    这里说下,webpack打包里面涉及到的东西,不止webpack,还有node的知识, node的全局变量process,process.env用于返回用户环境信息对象,因为是node的全局变量,所以 ...

  3. 2653 区间xor

    前言 这个题目在我之前那篇c++位运算的的随笔中提到过. 有兴趣的话去看看吧! 飞机场:https://www.cnblogs.com/laoguantongxiegogofs/p/12444517. ...

  4. zabbix基本概述

    #zabbix简介 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 #官网地址 #官方网站 http://www.zabbix.com #zabbix4.2 ...

  5. python学习列表(Lists).基础二

    列表(Lists) 序列是Python中最基本的数据结构,序列中的每个元素都分配一个数字,它的第一个索引是0第二个索引是1,依次类推. 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号 ...

  6. node 微信支付

    基于node 实现微信支付功能 需要了解的网站:微信支付 流程图: 1. 1.我的路由: const Koa = require('koa') const app = new Koa() const ...

  7. CUDA Pro Tip: Write Flexible Kernels with Grid-Stride Loops

    https://devblogs.nvidia.com/cuda-pro-tip-write-flexible-kernels-grid-stride-loops/ One of the most c ...

  8. bash编程练习,带选项,添加或删除用户

    脚本练习题: 可以接受选项及参数,而后能获取每一个选项,及选项的参数,并能根据选项及参数做出特定的操作: 比如:adminusers.sh -a|--add user .. -d|--del user ...

  9. Shell:sed用法 - 查找并替换字符串

    原文链接 语法 sed 's/serach_str/replace_str/g' file_path 在某个文件中查找所有的serach_str并替换为replace_str 参数 描述 serach ...

  10. MySQL:REPLACE函数的使用

    原文链接 REPLACE函数功能 REPLACE(columnName, search_str, replace_str) 查找columnName字段中所有search_str,并替换为replac ...