什么是内存管理?

内存管理主要是指程序运行时对计算机内存资源的分配、使用和释放等技术,内存管理的目标是高效、快速地分配内存,同时及时地释放和回收内存资源。内存管理主要包括是否有足够的内存供程序使用,从内存池中获取可用内存,使用后及时销毁并重新分配给其他程序使用。

PHP开发过程中,若遇到大数组等操作,那么可能会造成内存溢出等问题。一些常见的处理方法如下:

  1. 通过ini_set('memory_limit', '64M')方法重置PHP可以使用的内存大小,一般在远程主机上是不能修改php.ini的,只能通过程序设置。注意:在safe_mode下,ini_set()函数会失效

  2. 另外可以对数组进行分批处理,及时销毁无用的变量,尽量减少静态变量的使用,在需要数据重用时,可以考虑使用引用(&)。同时对于数据库、文件操作要及时关闭,对象使用完要及时调用析构函数释放资源空间等

  3. 及时使用unset()函数释放变量,注意:

a. unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间

b. 只有当指向该变量的所有变量都销毁后,才能成功释放内存

什么是垃圾回收?

PHP5.3之前使用的垃圾回收机制是单纯的“引用计数”方式,也就是说,每个内存对象都分配了一个计数器,当内存对象被变量引用时,计数器加1;当变量引用撤销后,计数器减1;当计数器等于0时,表明内存对象不再被使用,则会销毁该内存对象,垃圾回收完成。但是,“引用计数”也存在问题,就是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0。此时,这组对象已经没用了,但是不能被回收,从而导致内存泄漏。