PHP的原始变量类型有:

PHP垃圾回收机制

在php5.3之前,使用单纯的 "引用计数":

  1. 为每个内存中的对象分配一个计数器,每当对象被引用时,计数+1;
  2. 当引用撤销或或设置为NULL时,计数-1或置为0;
  3. 当计数为0时,内存对象被消耗,垃圾回收完成;

在php5.3之后,引入了更加完善的垃圾回收机制(解决了循环引用的内存泄漏问题):

每个php变量存在一个叫 "zval" 的变量容器中。一个zval变量容器除了包含变量的类型和值,还包含两个字节的额外信息。

第一个是is_ref,是一个bool值,用来表示这个变量是否属于引用集合(reference set)。通过这个字节,php引擎才能把普通变量和引用变量区分开来,由于php允许用户通过使用&来使用自定义引用,zval变量容器中还有一个内部引用计数机制,来优化内存使用。