On Wednesday, 14 September 2016 at 05:38:38 UTC, Shachar Shemesh wrote:
On 14/09/16 02:59, Walter Bright wrote:

Memory allocated with malloc() is unknown to the GC. This works fine unless a reference to the GC memory is inserted into malloc'd data, which is why there's an API to the GC to let it know about such things.


But if you do want to allow it, then my original problem comes back. You have to scan the malloced memory because you are not sure where that memory might contain pointers to GC managed memory.

And the hybrid hybrid approach (i.e. - only some of the memory allocated by malloc is scanned) is a wasp nest of potential bugs and problems.

Shachar

Cool down, take a step back.

There are memory management technique that can give you good result in most case, but will degenerate is few others. For instance RC doesn't handle cycles, plays poorly with exceptions, and so on.

There are ways to make RC work in all these case, but it is has severe drawbacks. Now, if you allocate using a GC, and use RC on top of it, you get 99% of the garbage cleaned up as you expect. But it allows the RC system to just delegate to the GC for cases it is not good at.

That way you get very occasional collection cycles to the point where it is usually not a problem, and if you are smart about it, you can even trigger them yourself at appropriate time. If 99% of the garbage is cleanup up by the RC mechanism, the the garbage accumulate at 1% the rate of what it would with a 100% GC system, and, consequently, you can run collection 1/100 time what you would with a pure GC system with the same memory overhead.

Now you may ask, how am I so sure that this is working great ? The short answer is PHP.

Reply via email to