通俗易懂.NET GC垃圾回收机制(适用于小白面试,大牛勿喷)
情景:你接到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垃圾回收机制(适用于小白面试,大牛勿喷)的更多相关文章
- JVM和GC垃圾回收机制和内存分配
JVM运行期间 线程共享 线程私有 线程共享: 方法区 堆方法区:存放可以共享数据,静态常量,类的共有方法属性字段等,可以共享的存在方法区. 堆:存放class对象 . 线程私有:本地方法栈 虚拟机栈 ...
- JVM架构和GC垃圾回收机制
深入理解系列之JDK8下JVM虚拟机(1)——JVM内存组成 https://blog.csdn.net/u011552404/article/details/80306316 JVM架构和GC垃圾回 ...
- java面试题之----JVM架构和GC垃圾回收机制详解
JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...
- 面试官,不要再问我“Java GC垃圾回收机制”了
Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底层原理,图文并茂,突破学习及面试瓶颈. 楔子-JVM内存结构补充 在上篇<JVM之内存结构详解> ...
- 乐字节Java|GC垃圾回收机制、package和import
本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...
- GC垃圾回收机制详解
JVM堆相关知识 为什么先说JVM堆? JVM的堆是Java对象的活动空间,程序中的类的对象从中分配空间,其存储着正在运行着的应用程序用到的所有对象.这些对象的建立方式就是那些new一类的操作 ...
- Android内存优化3 了解java GC 垃圾回收机制1
开篇废话 如果我们想要进行内存优化的工作,还是需要了解一下,但这一块的知识属于纯理论的,有可能看起来会有点枯燥,我尽量把这一篇的内容按照一定的逻辑来走一遍.首先,我们为什么要学习垃圾回收的机制,我大概 ...
- C# GC 垃圾回收机制
今天来谈谈C# 的GC ,也就是垃圾回收机制,非常的受教,总结如下 首先:谈谈托管,什么叫托管,我的理解就是托付C# 运行环境帮我们去管理,在这个运行环境中可以帮助我们开辟内存和释放内存,开辟内存一般 ...
- asp.net 之 GC (垃圾回收机制)
今天抽时间好好整理了下GC相关知识,看了CSDN和博客园的几篇文章,有了一定的简单了解,决定根据个人理解整合一份随笔写下来,望诸位指教. 一:基础问题 1.首先需要知道了解什么是GC? GC如其名,就 ...
随机推荐
- 内网渗透之跨边界传输 - LCX转发
跨边界转发 端口转发 lcx 流程 目标机 ./lcx -slave 跳板机ip 监听的端口 127.0.0.1 要转发的端口 跳板机(公网) ./lcx -listen 监听的端口 转发给攻击机访问 ...
- Mysql数据库定时全库备份
如下脚本用于mysql全库定时备份 mysql_dump_script.sh #!/bin/bash #保存备份个数,最多保留4个文件 number=4 #备份保存路径 backup_dir=/db/ ...
- Oracle 11g rac开启归档
Oracle 11g rac开启归档 查看目前归档状态 #节点1 ykws1 SQL> archive log list; Database log mode No Archive Mode A ...
- python学习基础知识
学习python前最好知道的知识点: python之父:Guido van Rossum python是一种面向对象语言 目前python最新的版本是3.8,python2已经逐渐淘汰 python的 ...
- linux ftp服务器设置,只允许用户访问指定的文件夹,禁止访问其他文件夹
在Linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...
- python3:input() 函数
一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: 3.语法:input("提示信息:& ...
- Windows通过VNC连接并显示Linux桌面(Ubuntu16.04)
目录 Linux中安装VNC服务 Linux中安装桌面环境 Windows中安装VNC Viewer Linux中安装VNC服务 sudo apt-get update sudo apt-get in ...
- Rational Rose 2007破解版
首先下载好软件,链接在这里 链接:https://pan.baidu.com/s/1op-W-ZX1tqefHffs3m-r0A 提取码:0jwm 这里面包含了Rational Rose 2007版的 ...
- javascript 自动选中容器里的文字
前些时间有这么个需求,需要实现选中div里面的文字,选中了的文字可直接按ctrl+v(或者右键)实现黏贴操作. html代码: <div id="text" class=&q ...
- 从原子类和Unsafe来理解Java内存模型,AtomicInteger的incrementAndGet方法源码介绍,valueOffset偏移量的理解
众所周知,i++分为三步: 1. 读取i的值 2. 计算i+1 3. 将计算出i+1赋给i 可以使用锁来保持操作的原子性和变量可见性,用volatile保持值的可见性和操作顺序性: 从一个小例子引发的 ...