Why GC
GC还未出现的时代
在自动垃圾回收概念出来之前的那个时代,大部分程序都是用诸如C语言这样的程序语言来编写的,而在C或者CPP语言中,所有的内存分配和回收都必须要开发人员手动处理,以C为例:
申请空间
1 |
|
以上代码列举了如何申请一片内存空间并赋值给p
指针, 然后又分配了10个字节的空间用来给p.name
指针.
释放空间
1 |
|
以上C代码就是正常的释放/返回空间的例子.
正常情况下,所有申请的内存,都需要有序地被释放回去,否则就会发生内存泄漏.
内存泄漏
1 |
|
以上就是经典的内存泄漏的代码样例.
在这种情况下,这段内存就无法被任何方式方式到,而这块内存又已经被分配出去,因此系统不会自动将其回收回来.因此对于本程序来说,可用的内存空间就永远减少了4个字节.
长此以往的话,程序的可用内存就会越来越少,最终程序的内存耗竭,发生崩溃.
这是我们不希望看到的.
自动内存回收GC
对于开发人员来说,如果能随心所欲的创建对象,而不需要花精力去考虑内存的回收问题,那该有多好呀.基于这个初衷,自动内存回收的理念逐渐浮现出来.
自动内存回收/垃圾回收(GC)其实存在于很多语言中,包括但不限于,Java, JavaScript,Python,Ruby等等.
1 |
|
本系列会以Java作为基础,讨论GC的概念,算法等.
Why GC
https://rug.al/2021/2021-09-26-why-gc/