digitalmars.D.announce - Blog post: Demystifying Garbage Collectors
- =?ISO-8859-1?Q?Alex_R=F8nne_Petersen?= (10/10) Oct 11 2012 http://xtzgzorex.wordpress.com/2012/10/11/demystifying-garbage-collector...
- Minas (1/1) Oct 12 2012 Nice article!
- Andrei Alexandrescu (3/9) Oct 12 2012 http://www.reddit.com/r/programming/comments/11doh4/demystifying_garbage...
- Era Scarecrow (26/36) Oct 13 2012 A question comes up, and I don't need an answer but it may be
- Leandro Lucarella (33/55) Oct 14 2012 There was at least one attempt to make the GC partially precise, which
http://xtzgzorex.wordpress.com/2012/10/11/demystifying-garbage-collectors/ Essentially an explanation of garbage collection for the layman programmer. Though, it does assume some familiarity with C and memory management. It's an abstract article not particularly specific to any GC implementation, but I figured I'd post it here anyway in case anyone's interested. -- Alex Rønne Petersen alex lycus.org http://lycus.org
Oct 11 2012
On 10/11/12 9:15 PM, Alex Rønne Petersen wrote:http://xtzgzorex.wordpress.com/2012/10/11/demystifying-garbage-collectors/ Essentially an explanation of garbage collection for the layman programmer. Though, it does assume some familiarity with C and memory management. It's an abstract article not particularly specific to any GC implementation, but I figured I'd post it here anyway in case anyone's interested.http://www.reddit.com/r/programming/comments/11doh4/demystifying_garbage_collectors/ Andrei
Oct 12 2012
On Friday, 12 October 2012 at 19:19:23 UTC, Andrei Alexandrescu wrote:On 10/11/12 9:15 PM, Alex Rønne Petersen wrote:A question comes up, and I don't need an answer but it may be useful to know, but I'm curious. Does D include an index to bitmaps specifying which offsets in a given memory block (say a class or a struct) of which fields actually would point to memory? With the strong possibility of working with manual pointer management it is possible it's not as useful as it could be; But may be considered when making a GC. Who knows, I may try my hand at it. //some pseudo random number generator class class Prng { int seed; int[] cached; //mem location as good as any for an initial seed, //maybe xor against time/date this() {seed = cast(int) &this;} } The above may have a bitmap indexed to 00000_010b (or an index so enum {nil, charArray, intArray} and thus [nil, intArray, nil], so it would skip the ints and only check the only that actually would contains a pointer. It could also effectively hold additional information on the type for further indexing, so when it sees 'cached' it will know it's an array, but if it was an array to Objects, then it would scan every part of that inner array mentioned for further references.http://xtzgzorex.wordpress.com/2012/10/11/demystifying-garbage-collectors/ Essentially an explanation of garbage collection for the layman programmer. Though, it does assume some familiarity with C and memory management. It's an abstract article not particularly specific to any GC implementation, but I figured I'd post it here anyway in case anyone's interested.http://www.reddit.com/r/programming/comments/11doh4/demystifying_garbage_collectors/
Oct 13 2012
Era Scarecrow, el 13 de October a las 21:18 me escribiste:
Does D include an index to bitmaps specifying which offsets in a
given memory block (say a class or a struct) of which fields
actually would point to memory? With the strong possibility of
working with manual pointer management it is possible it's not as
useful as it could be; But may be considered when making a GC. Who
knows, I may try my hand at it.
//some pseudo random number generator class
class Prng {
int seed;
int[] cached;
//mem location as good as any for an initial seed,
//maybe xor against time/date
this() {seed = cast(int) &this;}
}
The above may have a bitmap indexed to 00000_010b (or an index so
enum {nil, charArray, intArray} and thus [nil, intArray, nil], so it
would skip the ints and only check the only that actually would
contains a pointer. It could also effectively hold additional
information on the type for further indexing, so when it sees
'cached' it will know it's an array, but if it was an array to
Objects, then it would scan every part of that inner array mentioned
for further references.
There was at least one attempt to make the GC partially precise, which
is what you are suggesting. I've implemented a GC for D which goal was
to make it concurrent (to minimize pause times) but I also made use of
the information about types when available. The main advantage of this
is not really scanning less memory, but avoiding memory leaks by holding
memory cells as if they were alive when they really aren't, which was
a big problem in D now (and maybe it still is, I'm not very updated in
the state of D2's GC, but I'm almost sure there is still no type
information available to the GC in D2).
Unfortunately neither the patch to make DMD emit information about types
nor my GC were ever merged to D2, only Tango accepted the GC but since
DMD never accepted the patches emitting type information, the GC is not
precise in practice.
It worth mentioning that there is one bit of type information. If you
class/struct doesn't have *any* pointers, the memory cell where it is
stored will be marked as it doesn't have to be scanned. Same for arrays
of data that's known not to have pointers (like one of this class/struct
or ints, or floats for example).
There is even a bug report about this, if you want to take a look:
http://d.puremagic.com/issues/show_bug.cgi?id=3463
BTW, there is no need to "follow" arrays in any special way, dynamic
arrays are just a pointer and a size_t and the GC will "follow" the
pointer anyway. The array is allocated in a memory cell that would have
it's own type information and thus can be scanned (or ignored)
as needed.
--
Leandro Lucarella (AKA luca) http://llucax.com.ar/
----------------------------------------------------------------------
GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145 104C 949E BFB6 5F5A 8D05)
----------------------------------------------------------------------
22% of the time a pizza will arrive faster than an ambulance in
Great-Britain
Oct 14 2012









"Minas" <minas_mina1990 hotmail.co.uk> 