对象的生命周期

在解释“对象的生命周期”前,先来看下面这个例子:

有一个停车场共50个停车位,假如这个停车场是通过人工来管理停车位的使用情况,管理员有一个计数器,用来计录当前空闲的停车位有多少个,每当有新的停车位被使用了计数器就减1,而有新的停车位空闲了计数器就加1。

我们可以把这些停车位理解为【资源空间】,可支配的最大资源数为50(即停车位数量),记录资源使用情况的管理员可理解为资源的观察者(每当资源发生变化就对停车位进行计数)。

那么会存在有这样的场景,50个停车位都被使用了,如果有新来的车,那么就不允许进入停车场。这种场景可以理解为资源不足。

而计算机中的【内存】也跟【停车场】差不多,我们通常说的内存有4G、8G、16G等,那么该内存最多能够存储的数据量就是4G、8G、16G等,如果当前内存使用情况已达到瓶颈的话,运行的程序就会出现故障。

当内存使用达到瓶颈时,运行的程序为什么会出现故障?

因为计算机在运行一个程序的时候,会把要用到的数据先写入内存空间。当内存不足时,程序就无法继续对数据在内存上进行操作,此时就会导致程序故障。更具体的一些知识点,朋友们可以去查阅相关资料:程序是如何被计算机所执行的,本文不做讨论研究,因为这个问题本身就有很多可讨论的知识点。

上面解释到,计算机在运行一个程序的时候,会把要用到的数据先写入内存空间。这就相当于某些停车位被使用了(即资源空间被使用),而在内存中的表现就是占用了一块内存空间。但是内存的空间大小是有限的,那么在程序中什么时候会占用内存空间?并且有没有类似停车位的管理员一样的角色,来观察程序的相关使用情况呢?

先思考下程序中类的概念,虽然我们可以用“类”将生活中的各种事物进行抽象化来在程序中进行描述。但是“类”不能代表一个具体的东西,而这个具体的东西是以“对象”来表达,那么我们要想在程序中得到这个具体的“对象”则是需要【创建类的实例】来获取,这也就认证了前面文章所说的“类的具体实例就叫做对象”。那么这个“创建类的实例”也就是一个具体的【对象】诞生了,此时会在内存中占用一块空间。当这个具体的【对象】不再被使用后(相当于车离开了停车场,不需要使用停车位了),那么在程序中会有一个叫GC(垃圾回收机制)的东西来负责管理对象使用情况,类似停车场的管理员,职责就是:观察不再被使用的具体【对象】有哪些,然后将其销毁,腾出内存空间。GC(垃圾回收机制)管理对象的使用情况的详细说明本文暂不作讨论。

那么现在回到“生命周期”这个词,对于人来说就是从出生到死亡的一个过程。

所以在程序中,一个“对象的生命周期”就是指:对象的创建到使用结束后被销毁的一个过程。