RE: [PHP-DEV] Memory leak in eval()'d code
| From: | CHU Zhaowei | Date: | Sat, 29 Jun 2019 07:07:24 +0000 |
| Subject: | RE: [PHP-DEV] Memory leak in eval()'d code | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-106105@lists.php.net to get a copy of this message | ||
I think we missed the point here. Clousre, or anonymous class, should not be considered as normal
class. We expect normal class existing once we declare it till end of script. However, for anonymous
class, it's usually used within certain scope, so not only the instances, the class itself
should be included in the GC as well.
I guess the problem here is we didn't GC the space for definition of anonymous classes.
Regards,
CHU Zhaowei
> -----Original Message-----
> From: Stanislav Malyshev <smalyshev@gmail.com>
> Sent: Saturday, June 29, 2019 6:52 AM
> To: Benjamin Morel <benjamin.morel@gmail.com>
> Cc: PHP Internals <internals@lists.php.net>
> Subject: Re: [PHP-DEV] Memory leak in eval()'d code
>
>
>
> On 6/28/19 3:37 PM, Benjamin Morel wrote:
> > That's not a "leak". You create new objects (in this case, classes),
> > they take memory.
> >
> >
> > Why do they not "leak" memory without eval() then? Replace with
> >
$object = new class {}; and memory usage stays flat.
> > There has do be some kind of garbage collection for these anonymous classes.
>
> AFAIR this does not create new classes, since it's the same code, and same code
> means same class. But eval() has new code every time, thus new class. Generally
> I don't think PHP has any operation that can destroy an existing class. It won't be
> easy too since you don't know whether there are any objects of this class
> around (unless you're in shutdown).
>
> --
> Stas Malyshev
> smalyshev@gmail.com
>
> --
> PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit:
> http://www.php.net/unsub.php
>