欢迎来到风尚网
风尚网首页 > 首页 > 阅读 > 浅谈GC

浅谈GC

作者:宅祺祺 2016-02-19 07:12 来源:简书 编辑:美朵

文章摘要
导语:GC是GabageCollection的缩写。是指计算机中的垃圾回收机制。这种对于GC的理解在学习编译原理的过程中尤为重要。没有GC行不行首先,必须需要明确的是没有GC也是可以的。虽然会出现这样或者那样的问题,但是没有不代表不可以,只是会出现问题。这个问题就像电门能不能摸一样,当然可以摸,只是会被电死一样。所以说GC是编程语言的重要组成部分,而不是必要组成部分。比如说C语言,仍然采取的是通过程序员手动回收垃圾的方法,而没有自动回收垃圾的GC垃圾回收机制。如果不通过GC怎么回收垃圾像是C语言一类的编程

导语:

GC 是 GabageCollection 的缩写。

是指计算机中的垃圾回收机制。这种对于GC的理解在学习编译原理的过程中尤为重要。

没有GC行不行

首先,必须需要明确的是没有GC也是可以的。虽然会出现这样或者那样的问题,但是没有不代表不可以,只是会出现问题。

这个问题就像电门能不能摸一样,当然可以摸,只是会被电死一样。所以说GC是编程语言的重要组成部分,而不是必要组成部分。比如说C语言,仍然采取的是通过程序员手动回收垃圾的方法,而没有自动回收垃圾的GC垃圾回收机制。

如果不通过GC怎么回收垃圾

像是C语言一类的编程语言是通过程序员手动的方式进行资源回收的。

对于学习编译原理来说,我们为了避开资源回收,可以把数据全部存放在栈里,并且只在栈顶进行操作。比如类P-code语言就是这样做的。类P-code语言是PL/0语言编译之后的目标语言。是类P-code虚拟机上的汇编语言。

有点儿类似Java中字节码和Java虚拟机的概念。另外说一句PL/0语言编译系统是由著名计算机学家N.Wirth使用Pascal编写,后又被人改编成C语言,Java等版本。

就目前来说,大多数学习编译原理的学生,都不会把源文件编译为二级制的可执行文件(虽然也有使用GCC辅助进行编译成二进制文件这种课题)。不过就目前解释型语言在编程语言中所占的份额来看。

无论是学生的课程设计还是自制的编程语言,都以解释型为主,或者说是把源文件编译成字节码的形式,再使用虚拟机对字节码进行解释。所以说,把数据全部存放在栈里,并且只在栈顶进行操作。的确可以算是一种偷懒的手段,虽然非常偷懒,但是的确在时间紧任务重的时候非常实用。话说,笔者我在糊弄课程设计的时候就是这么干的。

怎么出现的垃圾

因为实际上很多学生并不了解垃圾回收机制。是因为学习C语言的时候就没学过。或者是学过,但是忘记了。如果你是计算机专业的学生,并且学习过C语言的话。

(笔者真的见过没学过C语言的计算机系学生,笔者我也是惊呆了。)如果你学习过C语言的话,你记得不记得 stdlib.h 这么个头文件。没错很多教材第一次接触这个头文件,还顺便讲了 time.h 这个头文件。是在讲随机数,我应该没记错。

如果往后学到链表的时候,stdlib.h 中有两个函数,你应该还记得 mallocfree 。想当年这两个函数,难道多少英(kōu)雄(jiǎo)好(dà)汉(hàn)来着?free 函数会弄出来好多不连续的未使用空间多吧。虽然说未使用空间挺多的,但是都不连续,这样也没有办法进行使用对吧。所以就产生了GC垃圾回收机制。

复制法垃圾回收

据说Java就是这么做的资源回收,但是具体是不是这样,笔者并没有考证。不过就笔者我,最近在利用业余时间做的自制编程语言来说,我并没有采用这种方法做垃圾回收。(没错,我是用的之前那种偷懒的方法)

所谓复制法垃圾回收就是指复制对象同时对其进行压缩。通过这种方法消除由 free 产生的碎片。

这样做的优点,就是能将已经使用的空间重新整理变得紧凑,使没有使用的空间保持连续的状态。更具体的做法是,在程序运行前就创建一个足够使用的堆,并且把这个堆一分为二。在使用的时候需要先使用其中的一半,当这一半被填充满的时候,进行垃圾回收。即,使用链表对对象进行跟踪。

能够跟踪到的对象复制到另一部分,不能跟踪到的对象全部视为垃圾。这样周而复始就是复制法垃圾回收。

当然,需要注意的是,这也是复制法垃圾回收的一个小缺陷。就是当复制之后,对象的地址发生了变化,需要对指向它们的所有指针进行维护。

结束语

虽然垃圾回收的方法还有很多种,除了其他经典的垃圾回收机制以外我所知的有非常多的编译原理方面的爱好者都根据经典的垃圾回收机制衍生了有自己特色的回收算法。这里就不一一赘述了。具体要使用何种方式进行垃圾回收,相信大家都会有自己的判断。不过只需要记住GC是编程语言的重要组成部分,它并不代表着全部。

小主,按键盘右方向键 → 翻页可以跳过片头呢

  

上一篇:看不懂的男人

  

下一篇:小标题效应

  

本文标题:浅谈GC

原文链接:http://i.she.vc/27731.html

和本文相似的内容:

    点击排行