Does php unset free memory?
I realise the second one avoids the overhead of a function call (update, is actually a language construct), but it would be interesting to know if one is better than the other. I have been using Show Is there a preferred one, and what is the reasoning? asked Feb 25, 2009 at 6:33
alexalex 467k197 gold badges865 silver badges975 bronze badges It was mentioned in the unset manual's page in 2009:
(Since 2013, that Note that until php5.3, if you have two objects in circular reference, such as in a parent-child relationship, calling unset() on the parent object will not free the memory used for the parent reference in the child object. (Nor will the memory be freed when the parent object is garbage-collected.) (bug 33595) The question "difference between unset and = null" details some differences:
Al Foиce ѫ 4,05512 gold badges37 silver badges46 bronze badges answered Feb 25, 2009 at 6:50
VonCVonC 1.2m492 gold badges4145 silver badges4890 bronze badges 13
Aside from performance issues, using answered Feb 25, 2009 at 8:55
Alex BarrettAlex Barrett 15.7k3 gold badges50 silver badges51 bronze badges 7 By doing an unset() on a variable, you've essentially marked the variable for 'garbage collection' (PHP doesn't really have one, but for example's sake) so the memory isn't immediately available. The variable no longer houses the data, but the stack remains at the larger size. Doing the null method drops the data and shrinks the stack memory almost immediately. This has been from personal experience and others as well. See the comments of the unset() function here. I personally use unset() between iterations in a loop so that I don't have to have the delay of the stack being yo-yo'd in size. The data is gone, but the footprint remains. On the next iteration, the memory is already being taken by php and thus, quicker to initialize the next variable. answered Feb 25, 2009 at 6:45
William HolroydWilliam Holroyd 3,3441 gold badge20 silver badges25 bronze badges 3
Per that it seems like "= null" is faster. PHP 5.4 results:
PHP 5.3 results:
PHP 5.2 results:
PHP 5.1 results:
Things start to look different with PHP 5.0 and 4.4. 5.0:
4.4:
Keep in mind microtime(true) doesn't work in PHP 4.4 so I had to use the microtime_float example given in php.net/microtime / Example #1. answered Nov 26, 2012 at 4:12 5 It works in a different way for variables copied by reference:
Antti29 2,91512 gold badges36 silver badges36 bronze badges answered Aug 2, 2012 at 2:32
RiaDRiaD 45.8k10 gold badges75 silver badges119 bronze badges 2 It makes a difference with array elements. Consider this example
Here, the key 'test' still exists. However, in this example
the key no longer exists. answered Mar 26, 2011 at 11:03
aurisauris 6816 silver badges5 bronze badges Regarding objects, especially in lazy-load scenario, one should consider garbage collector is running in idle CPU cycles, so presuming you're going into trouble when a lot of objects are loading small time penalty will solve the memory freeing. Use time_nanosleep to enable GC to collect memory. Setting variable to null is desirable. Tested on production server, originally the job consumed 50MB and then was halted. After nanosleep was used 14MB was constant memory consumption. One should say this depends on GC behaviour which may change from PHP version to version. But it works on PHP 5.3 fine. eg. this sample (code taken form VirtueMart2 google feed)
answered Nov 19, 2012 at 20:23
OSPOSP 1,4091 gold badge14 silver badges15 bronze badges For the record, and excluding the time that it takes:
It returns
Conclusion, both null and unset free memory as expected (not only at the end of the execution). Also, reassigning a variable holds the value twice at some point (520216 versus 438352) answered Jul 1, 2017 at 23:59
magallanesmagallanes 6,2874 gold badges51 silver badges52 bronze badges PHP 7 is already worked on such memory management issues and its reduced up-to minimal usage.
PHP 7.1 Outpu: took 0.16778993606567 seconds took 0.16630101203918 seconds answered Jun 27, 2018 at 5:54
Code example from comment
Running in docker container from image
But, with other example:
Results:
answered Jul 12, 2020 at 10:59
I still doubt about this, but I've tried it at my script and I'm using xdebug to know how it will affect my app memory usage. The script is set on my function like this :
And I add unset just before the But there is something unique on this comparative when I am not using unset() or NULL, xdebug give me 160144 as memory usage So, I think giving line to use unset() or NULL will add process to your application and it will be better to stay origin with your code and decrease the variable that you are using as effective as you can . Correct me if I'm wrong, thanks answered Nov 28, 2012 at 2:14
Anggie AzizAnggie Aziz 1331 gold badge1 silver badge10 bronze badges 1 I created a new
performance test for
But i can only test it on an PHP 5.5.9 server, here the results: - took 4.4571571350098 seconds - took 4.4425978660583 seconds I prefer answered Jun 9, 2015 at 17:28
Michael B.Michael B. 7578 silver badges14 bronze badges
and this also tackles about preventing memory leaks. please see this link http://www.hackingwithphp.com/18/1/11/be-wary-of-garbage-collection-part-2 i have been using unset for a long time now. better practice like this in code to instanly unset all variable that have been used already as array.
and please see related topic to unset How important is it to unset variables in PHP? [bug]
answered Oct 29, 2015 at 19:53
zero8zero8 1,8893 gold badges14 silver badges25 bronze badges Does PHP unset clear memory?unset() does just what its name says - unset a variable. It does not force immediate memory freeing. PHP's garbage collector will do it when it see fits - by intention as soon, as those CPU cycles aren't needed anyway, or as late as before the script would run out of memory, whatever occurs first.
How does PHP manage memory?PHP memory management functions are invoked by the MySQL Native Driver through a lightweight wrapper. Among others, the wrapper makes debugging easier. The various MySQL Server and the various client APIs differentiate between buffered and unbuffered result sets.
What does PHP unset do?unset() destroys the specified variables. The behavior of unset() inside of a function can vary depending on what type of variable you are attempting to destroy. If a globalized variable is unset() inside of a function, only the local variable is destroyed.
Is unset variable used in PHP?The unset() function is an inbuilt function in PHP which is used to unset a specified variable.
|