php 5.3新引入的garbage collection

以下代码来源www.php.net

 

<?php

// Start caching variables
gc_enable ();

$value = "Hello world" ;

echo
$value . "</ br>" ;

$value = "Bye world" ;

echo
$value . "</ br>" ;

// Load the variables into garbage "Previous"

$previous = gc_collect_cycles ();

// Get the previous value of "value" with old 0.
// 0 is the previous value, that means I take the first value "garbage" of the variable.

$value = $previous [ 'value' ] [ 0 ]

//Get empty the garbage collection variable to disallow from the memory.
gc_disable ( $previous );

echo
$value . "</ br>" ;

/*
This would return:

Hello world
Bye world
Hello world
*/
?>

 

5.3引入这个功能,可以调用已经被销毁或改变的变量,让Php更加灵活

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
垃圾收集(Garbage Collection)是一种自动内存管理机制,即自动回收不再使用的内存空间。在Python中,垃圾收集器通过搜索对象,并查找引用计数为0的对象来找到要回收的内存空间。 以下是Python中垃圾收集器的一些概念和过程[^1]: - 引用计数:当一个对象被创建时,它的引用计数被设置为1,当有一个的变量引用它时,它的引用计数会增加1,当这个引用变量被删除时,它的引用计数就会减1。当引用计数为0时,该对象不再被引用,就会被垃圾收集器回收。 - 标记-清除:Python的垃圾收集器通过标记-清除算法来回收内存。在这个过程中,垃圾收集器会首先标记所有被引用的对象,然后清除所有未被标记的对象。在清除这些未标记对象时,并将它们的内存释放回内存池。 - 引用循环:引用循环是指两个或两个以上的对象相互引用,这种情况下它们的引用计数永远不会降为0,因此不会被垃圾收集器回收。Python使用“标记-清除”和“分代回收”机制来处理这种情况。 - 分代回收:分代回收是指Python中垃圾收集器将内存分成不同的代,每个代都有一个垃圾回收阈值。创建的对象会被放置在第0代,当第0代的垃圾回收阈值达到时,升级到第1代。当第1代的垃圾回收阈值达到时,升级到第2代,以此类推。 以下是一个Python程序,展示了垃圾收集的过程: ```python import gc import sys a = [1, 2, 3] print(sys.getrefcount(a)) # 输出:2 b = [4, 5, 6] a.append(b) b.append(a) print(gc.get_count()) # 输出:(0, 0, 0) del a del b print(gc.get_count()) # 输出:(3, 0, 0) gc.collect() print(gc.get_count()) # 输出:(0, 0, 0) ``` 上述程序中,当a和b中的所有变量被删除后,使用gc.collect()方法可以触发垃圾收集器回收内存,输出gc.get_count()的结果为(0, 0, 0)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值