欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > php >内容正文

php

php如何让内存不释放,php中使用unset销毁变量并内存释放问题 -凯发k8官方网

发布时间:2024/10/14 php 27 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 php如何让内存不释放,php中使用unset销毁变量并内存释放问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

代码如下:

for ( $i = 1; $i < 100; $i ) {

$str = str_repeat('01234567', $i);

$a = memory_get_usage();

unset($str);

$b = memory_get_usage();

echo "\n

".$i.': '.($b - $a).' bytes.';

}

从结果看出:

8 x 32 = 256 在256字节长的时候才真正有必要释放内存,有些人说,不如直接$str = null来的速度快。

结果如下:

1: 0 bytes.

2: 0 bytes.

3: 0 bytes.

4: 0 bytes.

5: 0 bytes.

6: 0 bytes.

7: 0 bytes.

8: 0 bytes.

9: 0 bytes.

10: 0 bytes.

11: 0 bytes.

12: 0 bytes.

13: 0 bytes.

14: 0 bytes.

15: 0 bytes.

16: 0 bytes.

17: 0 bytes.

18: 0 bytes.

19: 0 bytes.

20: 0 bytes.

21: 0 bytes.

22: 0 bytes.

23: 0 bytes.

24: 0 bytes.

25: 0 bytes.

26: 0 bytes.

27: 0 bytes.

28: 0 bytes.

29: 0 bytes.

30: 0 bytes.

31: 0 bytes.

32: -272 bytes.

33: -280 bytes.

34: -288 bytes.

35: -296 bytes.

36: -304 bytes.

37: -312 bytes.

38: -320 bytes.

39: -328 bytes.

40: -336 bytes.

41: -344 bytes.

42: -352 bytes.

43: -360 bytes.

44: -368 bytes.

45: -376 bytes.

46: -384 bytes.

47: -392 bytes.

48: -400 bytes.

49: -408 bytes.

50: -416 bytes.

51: -424 bytes.

52: -432 bytes.

53: -440 bytes.

54: -448 bytes.

55: -456 bytes.

56: -464 bytes.

57: -472 bytes.

58: -480 bytes.

59: -488 bytes.

60: -496 bytes.

61: -504 bytes.

62: -512 bytes.

63: -520 bytes.

64: -528 bytes.

65: -536 bytes.

66: -544 bytes.

67: -552 bytes.

68: -560 bytes.

69: -568 bytes.

70: -576 bytes.

71: -584 bytes.

72: -592 bytes.

73: -600 bytes.

74: -608 bytes.

75: -616 bytes.

76: -624 bytes.

77: -632 bytes.

78: -640 bytes.

79: -648 bytes.

80: -656 bytes.

81: -664 bytes.

82: -672 bytes.

83: -680 bytes.

84: -688 bytes.

85: -696 bytes.

86: -704 bytes.

87: -712 bytes.

88: -720 bytes.

89: -728 bytes.

90: -736 bytes.

91: -744 bytes.

92: -752 bytes.

93: -760 bytes.

94: -768 bytes.

95: -776 bytes.

96: -784 bytes.

97: -792 bytes.

98: -800 bytes.

99: -808 bytes.

我们先看一个例子

$s=str_repeat('1',255); //产生由255个1组成的字符串

$m=memory_get_usage(); //获取当前占用内存

unset($s);

$mm=memory_get_usage(); //unset()后再查看当前占用内存

echo $m-$mm;

?>

最后输出unset()之前占用内存减去unset()之后占用内存,如果是正数,那么说明unset($s)已经将$s从内存中销毁(或者说,unset()之后内存占用减少了),可是我在php5和windows平台下,得到的结果是:-48。这是否可以说明,unset($s)并没有起到销毁变量$s所占用内存的作用呢?我们再作下面的例子:

$s=str_repeat('1',256); //产生由256个1组成的字符串

$m=memory_get_usage(); //获取当前占用内存

unset($s);

$mm=memory_get_usage(); //unset()后再查看当前占用内存

echo $m-$mm;

?>

这个例子,和上面的例子几乎相同,唯一的不同是,$s由256个1组成,即比第一个例子多了一个1,得到结果是:224。这是否可以说明,unset($s)已经将$s所占用的内存销毁了?

通过上面两个例子,我们可以得出以下结论:结论一、unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间。

那么是不是只要变量值超过256,使用unset就可以释放内存空间呢?我们再通过一个例子来测试一下:

$s=str_repeat('1',256); //这和第二个例子完全相同

$p=&$s;

$m=memory_get_usage();

unset($s); //销毁$s

$mm=memory_get_usage();

echo $p.'
';

echo $m-$mm;

?>

'刷新页面,我们看到第一行有256个1,第二行是-48,按理说我们已经销毁了$s,而$p只是引用$s的变量,应该是没有内容了,另外,unset($s)后内存占用却比unset()前增加了!现在我们再做以下的例子:

$s=str_repeat('1',256); //这和第二个例子完全相同

$p=&$s;

$m=memory_get_usage();

$s=null; //设置$s为null

$mm=memory_get_usage();

echo $p.'
';

echo $m-$mm;

?>

现在刷新页面,我们看到,输出$p已经是没有内容了,unset()前后内存占用量之差是224,即已经清除了变量占用的内存。本例中的$s=null也可以换成unset(),如下:

$s=str_repeat('1',256); //这和第二个例子完全相同

$p=&$s;

$m=memory_get_usage();

unset($s); //销毁$s

unset($p);

$mm=memory_get_usage();

echo $p.'
';

echo $m-$mm;

?>

我们将$s和$p都使用unset()销毁,这时再看内存占用量之差也是224,说明这样也可以释放内存。那么,我们可以得到另外一条结论:结论二、只有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存。

相信经过本文的例子后,大家应该对unset()有所了解了,最起码,本人用unset()也是为了在变量不起作用时,释放内存。

总结

以上是凯发k8官方网为你收集整理的php如何让内存不释放,php中使用unset销毁变量并内存释放问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图