On Thursday 24 February 2005 14:57, Jamie McCracken wrote:
It's *much* faster than reference counting everything. Reference counting is more or less the slowest garbage collection technique there is (except if only very few objects have to garbage collected). It also can't deal with circular references.
Thats why I would want ref count for Tobjects and not Tcomponents. Partial ref counting should be faster than doing GC on everything.
You could do partial GC as well. No one forces yo to do GC on everything.
You can but that would suck! Mixing unmanaged with managed code needs a lot of effort and the performance would be detrimental (marshalling of unmanaged objects/types).
GC gets a lot slower with the more objects you create.
Reference counting too.
GC is worse here because the pointers are not static in GC.
Not true. There are GC's with static as well as unstatic pointers (compacting GC's move pointers, but there are not compating GC's as well). For example Bohm GC (for C) does not move pointers. And it's GC.
I was referring to compacting GCs - non compacting ones are impractical to use unless you have tons of free memory and all the modern ones including .Net's generational one is incremently compacting.
so referencing an object means looking up the actual address in a lookup list
Nonsense. It's clear you don't know how typical GC works.
It does in compacting GCs (how else can you get the address of an object?)
(so more overhead whenever you call a method or pass an object reference).
Nope.
Yes for compacting GCs
GC does not use the stack efficiently
Complete nonsense. GC has nothing to statck. Zero, null, nada...
Exactly it has to use a managed heap which is slower! Unmanaged code can use the stack for greater speed. There is a lot of talk about GCs being almost as efficient as unmanaged code but I have never seen an implementation that comes close to that. C# and Java both have poor performance in large apps where you have lots of objects (delphi 2005 is also written in .net and it is very sluggish too).
and has to use a lot of heap so its extremely inefficient.
More of the same... It's simply not true. Besides compacting GC supported directly by the langauge allows for extremely effective use of heap -- as effective as that of stack.
But heap is slower than stack.
Ever see GC compact swap?
Better go learn more: http://www.iecc.com/gclist/GC-faq.html
yes but with GC everything would have to be managed
Nope. See above.
In practice yes as above unless you can live with all the extra inefficiency.
jamie.
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel