Skip to content

Commit

Permalink
Merge pull request reeze#7 from reeze/master
Browse files Browse the repository at this point in the history
merge update
  • Loading branch information
zither committed Jan 20, 2015
2 parents f3abf8f + d25f8ee commit 8acf8ac
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 2 deletions.
2 changes: 1 addition & 1 deletion book/chapt06/06-04-00-garbage-collection.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ PHP也在语言层实现了内存的动态管理,这在前面的章节中已

在PHP5.3版本之前,PHP只有简单的基于引用计数的垃圾回收,当一个变量的[引用计数](http://docs.php.net/manual/zh/features.gc.refcounting-basics.php)变为0时,
PHP将在内存中销毁这个变量,只是这里的垃圾并不能称之为垃圾。
并且PHP在一个生命周期结束后就会释放此进程/线程所点的内容,这种方式决定了PHP在前期不需要过多考虑内存的泄露问题。
并且PHP在一个生命周期结束后就会释放此进程/线程所占的内容,这种方式决定了PHP在前期不需要过多考虑内存的泄露问题。
但是随着PHP的发展,PHP开发者的增加以及其所承载的业务范围的扩大,在PHP5.3中引入了更加完善的垃圾回收机制。
新的垃圾回收机制解决了无法处理循环的引用内存泄漏问题。PHP5.3中的垃圾回收机制使用了文章[引用计数系统中的同步周期回收(Concurrent Cycle Collection in Reference Counted Systems)](http://www.research.ibm.com/people/d/dfb/papers/Bacon01Concurrent.pdf)
中的同步算法。关于这个算法的介绍我们就不再赘述,在PHP的官方文档有图文并茂的介绍:[回收周期(Collecting Cycles)](http://docs.php.net/manual/zh/features.gc.collecting-cycles.php)
Expand Down
2 changes: 1 addition & 1 deletion book/chapt06/06-04-01-new-garbage-collection.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ zval_ptr_dtor并不是一个函数,只是一个长得有点像函数的宏。
从代码我们可以很清晰的看出这个zval的析构过程,关于引用计数字段做了以下两个操作:

* 如果变量的引用计数为1,即减一后引用计数为0,直接清除变量。如果当前变量如果被缓存,则需要清除缓存
* 如果变量的引用计数大于1,即减一后引用计数大于0,则将变量放入垃圾列表。如果变更存在引用,则去掉其引用。
* 如果变量的引用计数大于1,即减一后引用计数大于0,则将变量放入垃圾列表。如果变量存在引用,则去掉其引用。

将变量放入垃圾列表的操作是GC_ZVAL_CHECK_POSSIBLE_ROOT,这也是一个宏,其对应函数gc_zval_check_possible_root,
但是此函数仅对数组和对象执行垃圾回收操作。对于数组和对象变量,它会调用gc_zval_possible_root函数。
Expand Down

0 comments on commit 8acf8ac

Please sign in to comment.