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 <smalys...@gmail.com> > Sent: Saturday, June 29, 2019 6:52 AM > To: Benjamin Morel <benjamin.mo...@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 > smalys...@gmail.com > > -- > PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: > http://www.php.net/unsub.php > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php