Annotation of win32/gc/doc/README, revision 1.5
1.1 paf 1: Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers
2: Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved.
3: Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved.
1.5 ! misha 4: Copyright (c) 1999-2005 Hewlett-Packard Development Company, L.P.
1.1 paf 5:
6: The file linux_threads.c is also
7: Copyright (c) 1998 by Fergus Henderson. All rights reserved.
8:
9: The files Makefile.am, and configure.in are
10: Copyright (c) 2001 by Red Hat Inc. All rights reserved.
11:
12: Several files supporting GNU-style builds are copyrighted by the Free
13: Software Foundation, and carry a different license from that given
1.5 ! misha 14: below. The files included in the libatomic_ops distribution (included
! 15: here) use either the license below, or a similar MIT-style license,
! 16: or, for some files not actually used by the garbage-collector library, the
! 17: GPL.
1.1 paf 18:
19: THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
20: OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
21:
22: Permission is hereby granted to use or copy this program
23: for any purpose, provided the above notices are retained on all copies.
24: Permission to modify the code and to distribute modified code is granted,
25: provided the above notices are retained, and a notice that the code was
26: modified is included with the above copyright notice.
27:
28: A few of the files needed to use the GNU-style build procedure come with
29: slightly different licenses, though they are all similar in spirit. A few
30: are GPL'ed, but with an exception that should cover all uses in the
31: collector. (If you are concerned about such things, I recommend you look
32: at the notice in config.guess or ltmain.sh.)
33:
1.5 ! misha 34: This is version 7.1 of a conservative garbage collector for C and C++.
1.1 paf 35:
36: You might find a more recent version of this at
37:
38: http://www.hpl.hp.com/personal/Hans_Boehm/gc
39:
40: OVERVIEW
41:
42: This is intended to be a general purpose, garbage collecting storage
43: allocator. The algorithms used are described in:
44:
45: Boehm, H., and M. Weiser, "Garbage Collection in an Uncooperative Environment",
46: Software Practice & Experience, September 1988, pp. 807-820.
47:
48: Boehm, H., A. Demers, and S. Shenker, "Mostly Parallel Garbage Collection",
49: Proceedings of the ACM SIGPLAN '91 Conference on Programming Language Design
50: and Implementation, SIGPLAN Notices 26, 6 (June 1991), pp. 157-164.
51:
52: Boehm, H., "Space Efficient Conservative Garbage Collection", Proceedings
53: of the ACM SIGPLAN '91 Conference on Programming Language Design and
54: Implementation, SIGPLAN Notices 28, 6 (June 1993), pp. 197-206.
55:
56: Boehm H., "Reducing Garbage Collector Cache Misses", Proceedings of the
57: 2000 International Symposium on Memory Management.
58:
59: Possible interactions between the collector and optimizing compilers are
60: discussed in
61:
62: Boehm, H., and D. Chase, "A Proposal for GC-safe C Compilation",
63: The Journal of C Language Translation 4, 2 (December 1992).
64:
65: and
66:
67: Boehm H., "Simple GC-safe Compilation", Proceedings
68: of the ACM SIGPLAN '96 Conference on Programming Language Design and
69: Implementation.
70:
71: (Some of these are also available from
72: http://www.hpl.hp.com/personal/Hans_Boehm/papers/, among other places.)
73:
74: Unlike the collector described in the second reference, this collector
75: operates either with the mutator stopped during the entire collection
76: (default) or incrementally during allocations. (The latter is supported
1.5 ! misha 77: on fewer machines.) On the most common platforms, it can be built
1.1 paf 78: with or without thread support. On a few platforms, it can take advantage
79: of a multiprocessor to speed up garbage collection.
80:
81: Many of the ideas underlying the collector have previously been explored
82: by others. Notably, some of the run-time systems developed at Xerox PARC
83: in the early 1980s conservatively scanned thread stacks to locate possible
84: pointers (cf. Paul Rovner, "On Adding Garbage Collection and Runtime Types
85: to a Strongly-Typed Statically Checked, Concurrent Language" Xerox PARC
86: CSL 84-7). Doug McIlroy wrote a simpler fully conservative collector that
87: was part of version 8 UNIX (tm), but appears to not have received
88: widespread use.
89:
90: Rudimentary tools for use of the collector as a leak detector are included
91: (see http://www.hpl.hp.com/personal/Hans_Boehm/gc/leak.html),
92: as is a fairly sophisticated string package "cord" that makes use of the
93: collector. (See doc/README.cords and H.-J. Boehm, R. Atkinson, and M. Plass,
94: "Ropes: An Alternative to Strings", Software Practice and Experience 25, 12
95: (December 1995), pp. 1315-1330. This is very similar to the "rope" package
96: in Xerox Cedar, or the "rope" package in the SGI STL or the g++ distribution.)
97:
98: Further collector documantation can be found at
99:
100: http://www.hpl.hp.com/personal/Hans_Boehm/gc
101:
102:
103: GENERAL DESCRIPTION
104:
105: This is a garbage collecting storage allocator that is intended to be
106: used as a plug-in replacement for C's malloc.
107:
108: Since the collector does not require pointers to be tagged, it does not
109: attempt to ensure that all inaccessible storage is reclaimed. However,
110: in our experience, it is typically more successful at reclaiming unused
111: memory than most C programs using explicit deallocation. Unlike manually
112: introduced leaks, the amount of unreclaimed memory typically stays
113: bounded.
114:
115: In the following, an "object" is defined to be a region of memory allocated
116: by the routines described below.
117:
118: Any objects not intended to be collected must be pointed to either
119: from other such accessible objects, or from the registers,
120: stack, data, or statically allocated bss segments. Pointers from
121: the stack or registers may point to anywhere inside an object.
122: The same is true for heap pointers if the collector is compiled with
1.5 ! misha 123: ALL_INTERIOR_POINTERS defined, or GC_all_interior_pointers is otherwise
! 124: set, as is now the default.
1.1 paf 125:
126: Compiling without ALL_INTERIOR_POINTERS may reduce accidental retention
127: of garbage objects, by requiring pointers from the heap to to the beginning
128: of an object. But this no longer appears to be a significant
1.5 ! misha 129: issue for most programs occupying a small fraction of the possible
! 130: address space.
1.1 paf 131:
132: There are a number of routines which modify the pointer recognition
133: algorithm. GC_register_displacement allows certain interior pointers
134: to be recognized even if ALL_INTERIOR_POINTERS is nor defined.
135: GC_malloc_ignore_off_page allows some pointers into the middle of large objects
136: to be disregarded, greatly reducing the probablility of accidental
137: retention of large objects. For most purposes it seems best to compile
138: with ALL_INTERIOR_POINTERS and to use GC_malloc_ignore_off_page if
139: you get collector warnings from allocations of very large objects.
140: See README.debugging for details.
141:
142: WARNING: pointers inside memory allocated by the standard "malloc" are not
143: seen by the garbage collector. Thus objects pointed to only from such a
144: region may be prematurely deallocated. It is thus suggested that the
145: standard "malloc" be used only for memory regions, such as I/O buffers, that
146: are guaranteed not to contain pointers to garbage collectable memory.
147: Pointers in C language automatic, static, or register variables,
148: are correctly recognized. (Note that GC_malloc_uncollectable has semantics
149: similar to standard malloc, but allocates objects that are traced by the
150: collector.)
151:
152: WARNING: the collector does not always know how to find pointers in data
153: areas that are associated with dynamic libraries. This is easy to
154: remedy IF you know how to find those data areas on your operating
155: system (see GC_add_roots). Code for doing this under SunOS, IRIX 5.X and 6.X,
156: HP/UX, Alpha OSF/1, Linux, and win32 is included and used by default. (See
157: README.win32 for win32 details.) On other systems pointers from dynamic
158: library data areas may not be considered by the collector.
159: If you're writing a program that depends on the collector scanning
160: dynamic library data areas, it may be a good idea to include at least
161: one call to GC_is_visible() to ensure that those areas are visible
162: to the collector.
163:
164: Note that the garbage collector does not need to be informed of shared
165: read-only data. However if the shared library mechanism can introduce
166: discontiguous data areas that may contain pointers, then the collector does
167: need to be informed.
168:
169: Signal processing for most signals may be deferred during collection,
170: and during uninterruptible parts of the allocation process.
171: Like standard ANSI C mallocs, by default it is unsafe to invoke
172: malloc (and other GC routines) from a signal handler while another
173: malloc call may be in progress. Removing -DNO_SIGNALS from Makefile
174: attempts to remedy that. But that may not be reliable with a compiler that
175: substantially reorders memory operations inside GC_malloc.
176:
177: The allocator/collector can also be configured for thread-safe operation.
178: (Full signal safety can also be achieved, but only at the cost of two system
179: calls per malloc, which is usually unacceptable.)
180: WARNING: the collector does not guarantee to scan thread-local storage
181: (e.g. of the kind accessed with pthread_getspecific()). The collector
182: does scan thread stacks, though, so generally the best solution is to
183: ensure that any pointers stored in thread-local storage are also
184: stored on the thread's stack for the duration of their lifetime.
185: (This is arguably a longstanding bug, but it hasn't been fixed yet.)
186:
187: INSTALLATION AND PORTABILITY
188:
1.5 ! misha 189: As distributed, the collector operates silently
! 190: In the event of problems, this can usually be changed by defining the
! 191: GC_PRINT_STATS or GC_PRINT_VERBOSE_STATS environment variables. This
! 192: will result in a few lines of descriptive output for each collection.
1.1 paf 193: (The given statistics exhibit a few peculiarities.
194: Things don't appear to add up for a variety of reasons, most notably
195: fragmentation losses. These are probably much more significant for the
196: contrived program "test.c" than for your application.)
197:
1.5 ! misha 198: On most Un*x-like platforms, the collector can be built either using a
! 199: GNU autoconf-based build infrastructure (type "configure; make" in the
! 200: simplest case), or with a classic makefile by itself (type
! 201: "cp Makefile.direct Makefile; make"). Here we focus on the latter option.
! 202: On other platforms, typically only the latter option is available, though
! 203: with a different supplied Makefile.)
! 204:
! 205: Typing "make test" nstead of "make" will automatically build the collector
1.1 paf 206: and then run setjmp_test and gctest. Setjmp_test will give you information
207: about configuring the collector, which is useful primarily if you have
208: a machine that's not already supported. Gctest is a somewhat superficial
209: test of collector functionality. Failure is indicated by a core dump or
210: a message to the effect that the collector is broken. Gctest takes about
1.5 ! misha 211: a second to two to run on reasonable 2007 vintage desktops.
! 212: It may use up to about 30MB of memory. (The
1.1 paf 213: multi-threaded version will use more. 64-bit versions may use more.)
214: "Make test" will also, as its last step, attempt to build and test the
1.5 ! misha 215: "cord" string library.)
1.1 paf 216:
217: The Makefile will generate a library gc.a which you should link against.
218: Typing "make cords" will add the cord library to gc.a.
219: Note that this requires an ANSI C compiler.
220:
221: It is suggested that if you need to replace a piece of the collector
222: (e.g. GC_mark_rts.c) you simply list your version ahead of gc.a on the
223: ld command line, rather than replacing the one in gc.a. (This will
224: generate numerous warnings under some versions of AIX, but it still
225: works.)
226:
227: All include files that need to be used by clients will be put in the
228: include subdirectory. (Normally this is just gc.h. "Make cords" adds
229: "cord.h" and "ec.h".)
230:
231: The collector currently is designed to run essentially unmodified on
232: machines that use a flat 32-bit or 64-bit address space.
233: That includes the vast majority of Workstations and X86 (X >= 3) PCs.
234: (The list here was deleted because it was getting too long and constantly
235: out of date.)
236:
237: In a few cases (Amiga, OS/2, Win32, MacOS) a separate makefile
238: or equivalent is supplied. Many of these have separate README.system
239: files.
240:
241: Dynamic libraries are completely supported only under SunOS/Solaris,
242: (and even that support is not functional on the last Sun 3 release),
243: Linux, FreeBSD, NetBSD, IRIX 5&6, HP/UX, Win32 (not Win32S) and OSF/1
244: on DEC AXP machines plus perhaps a few others listed near the top
245: of dyn_load.c. On other machines we recommend that you do one of
246: the following:
247:
248: 1) Add dynamic library support (and send us the code).
249: 2) Use static versions of the libraries.
250: 3) Arrange for dynamic libraries to use the standard malloc.
251: This is still dangerous if the library stores a pointer to a
252: garbage collected object. But nearly all standard interfaces
253: prohibit this, because they deal correctly with pointers
254: to stack allocated objects. (Strtok is an exception. Don't
255: use it.)
256:
257: In all cases we assume that pointer alignment is consistent with that
258: enforced by the standard C compilers. If you use a nonstandard compiler
259: you may have to adjust the alignment parameters defined in gc_priv.h.
260: Note that this may also be an issue with packed records/structs, if those
261: enforce less alignment for pointers.
262:
263: A port to a machine that is not byte addressed, or does not use 32 bit
264: or 64 bit addresses will require a major effort. A port to plain MSDOS
265: or win16 is hard.
266:
1.5 ! misha 267: For machines not already mentioned, or for nonstandard compilers,
! 268: some porting suggestions are provided in the "porting.html" file.
1.1 paf 269:
270: THE C INTERFACE TO THE ALLOCATOR
271:
272: The following routines are intended to be directly called by the user.
273: Note that usually only GC_malloc is necessary. GC_clear_roots and GC_add_roots
274: calls may be required if the collector has to trace from nonstandard places
275: (e.g. from dynamic library data areas on a machine on which the
276: collector doesn't already understand them.) On some machines, it may
277: be desirable to set GC_stacktop to a good approximation of the stack base.
278: (This enhances code portability on HP PA machines, since there is no
279: good way for the collector to compute this value.) Client code may include
280: "gc.h", which defines all of the following, plus many others.
281:
282: 1) GC_malloc(nbytes)
283: - allocate an object of size nbytes. Unlike malloc, the object is
284: cleared before being returned to the user. Gc_malloc will
285: invoke the garbage collector when it determines this to be appropriate.
286: GC_malloc may return 0 if it is unable to acquire sufficient
287: space from the operating system. This is the most probable
288: consequence of running out of space. Other possible consequences
289: are that a function call will fail due to lack of stack space,
290: or that the collector will fail in other ways because it cannot
291: maintain its internal data structures, or that a crucial system
292: process will fail and take down the machine. Most of these
293: possibilities are independent of the malloc implementation.
294:
295: 2) GC_malloc_atomic(nbytes)
296: - allocate an object of size nbytes that is guaranteed not to contain any
297: pointers. The returned object is not guaranteed to be cleared.
298: (Can always be replaced by GC_malloc, but results in faster collection
299: times. The collector will probably run faster if large character
300: arrays, etc. are allocated with GC_malloc_atomic than if they are
301: statically allocated.)
302:
303: 3) GC_realloc(object, new_size)
304: - change the size of object to be new_size. Returns a pointer to the
305: new object, which may, or may not, be the same as the pointer to
306: the old object. The new object is taken to be atomic iff the old one
307: was. If the new object is composite and larger than the original object,
308: then the newly added bytes are cleared (we hope). This is very likely
309: to allocate a new object, unless MERGE_SIZES is defined in gc_priv.h.
310: Even then, it is likely to recycle the old object only if the object
311: is grown in small additive increments (which, we claim, is generally bad
312: coding practice.)
313:
314: 4) GC_free(object)
315: - explicitly deallocate an object returned by GC_malloc or
316: GC_malloc_atomic. Not necessary, but can be used to minimize
317: collections if performance is critical. Probably a performance
318: loss for very small objects (<= 8 bytes).
319:
320: 5) GC_expand_hp(bytes)
321: - Explicitly increase the heap size. (This is normally done automatically
322: if a garbage collection failed to GC_reclaim enough memory. Explicit
323: calls to GC_expand_hp may prevent unnecessarily frequent collections at
324: program startup.)
325:
326: 6) GC_malloc_ignore_off_page(bytes)
327: - identical to GC_malloc, but the client promises to keep a pointer to
328: the somewhere within the first 256 bytes of the object while it is
329: live. (This pointer should nortmally be declared volatile to prevent
330: interference from compiler optimizations.) This is the recommended
331: way to allocate anything that is likely to be larger than 100Kbytes
332: or so. (GC_malloc may result in failure to reclaim such objects.)
333:
334: 7) GC_set_warn_proc(proc)
335: - Can be used to redirect warnings from the collector. Such warnings
336: should be rare, and should not be ignored during code development.
337:
338: 8) GC_enable_incremental()
339: - Enables generational and incremental collection. Useful for large
340: heaps on machines that provide access to page dirty information.
341: Some dirty bit implementations may interfere with debugging
342: (by catching address faults) and place restrictions on heap arguments
343: to system calls (since write faults inside a system call may not be
344: handled well).
345:
346: 9) Several routines to allow for registration of finalization code.
347: User supplied finalization code may be invoked when an object becomes
348: unreachable. To call (*f)(obj, x) when obj becomes inaccessible, use
349: GC_register_finalizer(obj, f, x, 0, 0);
350: For more sophisticated uses, and for finalization ordering issues,
351: see gc.h.
352:
353: The global variable GC_free_space_divisor may be adjusted up from its
354: default value of 4 to use less space and more collection time, or down for
355: the opposite effect. Setting it to 1 or 0 will effectively disable collections
356: and cause all allocations to simply grow the heap.
357:
358: The variable GC_non_gc_bytes, which is normally 0, may be changed to reflect
359: the amount of memory allocated by the above routines that should not be
360: considered as a candidate for collection. Careless use may, of course, result
361: in excessive memory consumption.
362:
363: Some additional tuning is possible through the parameters defined
364: near the top of gc_priv.h.
365:
366: If only GC_malloc is intended to be used, it might be appropriate to define:
367:
368: #define malloc(n) GC_malloc(n)
369: #define calloc(m,n) GC_malloc((m)*(n))
370:
371: For small pieces of VERY allocation intensive code, gc_inl.h
372: includes some allocation macros that may be used in place of GC_malloc
373: and friends.
374:
375: All externally visible names in the garbage collector start with "GC_".
376: To avoid name conflicts, client code should avoid this prefix, except when
377: accessing garbage collector routines or variables.
378:
379: There are provisions for allocation with explicit type information.
380: This is rarely necessary. Details can be found in gc_typed.h.
381:
382: THE C++ INTERFACE TO THE ALLOCATOR:
383:
384: The Ellis-Hull C++ interface to the collector is included in
385: the collector distribution. If you intend to use this, type
386: "make c++" after the initial build of the collector is complete.
387: See gc_cpp.h for the definition of the interface. This interface
388: tries to approximate the Ellis-Detlefs C++ garbage collection
389: proposal without compiler changes.
390:
1.5 ! misha 391: Very often it will also be necessary to use gc_allocator.h and the
! 392: allocator declared there to construct STL data structures. Otherwise
! 393: subobjects of STL data structures wil be allcoated using a system
! 394: allocator, and objects they refer to may be prematurely collected.
1.1 paf 395:
396: USE AS LEAK DETECTOR:
397:
398: The collector may be used to track down leaks in C programs that are
399: intended to run with malloc/free (e.g. code with extreme real-time or
400: portability constraints). To do so define FIND_LEAK in Makefile
401: This will cause the collector to invoke the report_leak
402: routine defined near the top of reclaim.c whenever an inaccessible
403: object is found that has not been explicitly freed. Such objects will
404: also be automatically reclaimed.
1.5 ! misha 405: If all objects are allocated with GC_DEBUG_MALLOC (see next section), then
! 406: the default version of report_leak will report at least the source file and
! 407: line number at which the leaked object was allocated. This may sometimes be
! 408: sufficient. (On a few machines, it will also report a cryptic stack trace.
! 409: If this is not symbolic, it can somethimes be called into a sympolic stack
! 410: trace by invoking program "foo" with "callprocs foo". Callprocs is a short
! 411: shell script that invokes adb to expand program counter values to symbolic
! 412: addresses. It was largely supplied by Scott Schwartz.)
1.1 paf 413: Note that the debugging facilities described in the next section can
414: sometimes be slightly LESS effective in leak finding mode, since in
415: leak finding mode, GC_debug_free actually results in reuse of the object.
416: (Otherwise the object is simply marked invalid.) Also note that the test
417: program is not designed to run meaningfully in FIND_LEAK mode.
418: Use "make gc.a" to build the collector.
419:
420: DEBUGGING FACILITIES:
421:
422: The routines GC_debug_malloc, GC_debug_malloc_atomic, GC_debug_realloc,
423: and GC_debug_free provide an alternate interface to the collector, which
424: provides some help with memory overwrite errors, and the like.
425: Objects allocated in this way are annotated with additional
426: information. Some of this information is checked during garbage
427: collections, and detected inconsistencies are reported to stderr.
428:
429: Simple cases of writing past the end of an allocated object should
430: be caught if the object is explicitly deallocated, or if the
431: collector is invoked while the object is live. The first deallocation
432: of an object will clear the debugging info associated with an
433: object, so accidentally repeated calls to GC_debug_free will report the
434: deallocation of an object without debugging information. Out of
435: memory errors will be reported to stderr, in addition to returning
436: NIL.
437:
438: GC_debug_malloc checking during garbage collection is enabled
439: with the first call to GC_debug_malloc. This will result in some
440: slowdown during collections. If frequent heap checks are desired,
441: this can be achieved by explicitly invoking GC_gcollect, e.g. from
442: the debugger.
443:
444: GC_debug_malloc allocated objects should not be passed to GC_realloc
445: or GC_free, and conversely. It is however acceptable to allocate only
446: some objects with GC_debug_malloc, and to use GC_malloc for other objects,
447: provided the two pools are kept distinct. In this case, there is a very
448: low probablility that GC_malloc allocated objects may be misidentified as
449: having been overwritten. This should happen with probability at most
450: one in 2**32. This probability is zero if GC_debug_malloc is never called.
451:
452: GC_debug_malloc, GC_malloc_atomic, and GC_debug_realloc take two
453: additional trailing arguments, a string and an integer. These are not
454: interpreted by the allocator. They are stored in the object (the string is
455: not copied). If an error involving the object is detected, they are printed.
456:
457: The macros GC_MALLOC, GC_MALLOC_ATOMIC, GC_REALLOC, GC_FREE, and
458: GC_REGISTER_FINALIZER are also provided. These require the same arguments
459: as the corresponding (nondebugging) routines. If gc.h is included
460: with GC_DEBUG defined, they call the debugging versions of these
461: functions, passing the current file name and line number as the two
462: extra arguments, where appropriate. If gc.h is included without GC_DEBUG
463: defined, then all these macros will instead be defined to their nondebugging
464: equivalents. (GC_REGISTER_FINALIZER is necessary, since pointers to
465: objects with debugging information are really pointers to a displacement
466: of 16 bytes form the object beginning, and some translation is necessary
467: when finalization routines are invoked. For details, about what's stored
468: in the header, see the definition of the type oh in debug_malloc.c)
469:
470: INCREMENTAL/GENERATIONAL COLLECTION:
471:
472: The collector normally interrupts client code for the duration of
473: a garbage collection mark phase. This may be unacceptable if interactive
474: response is needed for programs with large heaps. The collector
475: can also run in a "generational" mode, in which it usually attempts to
476: collect only objects allocated since the last garbage collection.
477: Furthermore, in this mode, garbage collections run mostly incrementally,
478: with a small amount of work performed in response to each of a large number of
479: GC_malloc requests.
480:
481: This mode is enabled by a call to GC_enable_incremental().
482:
483: Incremental and generational collection is effective in reducing
484: pause times only if the collector has some way to tell which objects
485: or pages have been recently modified. The collector uses two sources
486: of information:
487:
488: 1. Information provided by the VM system. This may be provided in
489: one of several forms. Under Solaris 2.X (and potentially under other
490: similar systems) information on dirty pages can be read from the
491: /proc file system. Under other systems (currently SunOS4.X) it is
492: possible to write-protect the heap, and catch the resulting faults.
493: On these systems we require that system calls writing to the heap
494: (other than read) be handled specially by client code.
495: See os_dep.c for details.
496:
497: 2. Information supplied by the programmer. We define "stubborn"
498: objects to be objects that are rarely changed. Such an object
499: can be allocated (and enabled for writing) with GC_malloc_stubborn.
500: Once it has been initialized, the collector should be informed with
501: a call to GC_end_stubborn_change. Subsequent writes that store
502: pointers into the object must be preceded by a call to
503: GC_change_stubborn.
504:
505: This mechanism performs best for objects that are written only for
506: initialization, and such that only one stubborn object is writable
507: at once. It is typically not worth using for short-lived
508: objects. Stubborn objects are treated less efficiently than pointerfree
509: (atomic) objects.
510:
511: A rough rule of thumb is that, in the absence of VM information, garbage
512: collection pauses are proportional to the amount of pointerful storage
513: plus the amount of modified "stubborn" storage that is reachable during
514: the collection.
515:
516: Initial allocation of stubborn objects takes longer than allocation
517: of other objects, since other data structures need to be maintained.
518:
519: We recommend against random use of stubborn objects in client
520: code, since bugs caused by inappropriate writes to stubborn objects
521: are likely to be very infrequently observed and hard to trace.
522: However, their use may be appropriate in a few carefully written
523: library routines that do not make the objects themselves available
524: for writing by client code.
525:
526:
527: BUGS:
528:
529: Any memory that does not have a recognizable pointer to it will be
530: reclaimed. Exclusive-or'ing forward and backward links in a list
531: doesn't cut it.
532: Some C optimizers may lose the last undisguised pointer to a memory
533: object as a consequence of clever optimizations. This has almost
534: never been observed in practice. Send mail to boehm@acm.org
535: for suggestions on how to fix your compiler.
536: This is not a real-time collector. In the standard configuration,
537: percentage of time required for collection should be constant across
538: heap sizes. But collection pauses will increase for larger heaps.
1.5 ! misha 539: They will decrease with the number of processors if parallel marking
! 540: is enabled.
! 541: (On 2007 vintage machines, GC times may be on the order of 5 msecs
! 542: per MB of accessible memory that needs to be scanned and processor.
! 543: Your mileage may vary.) The incremental/generational collection facility
! 544: may help in some cases.
1.1 paf 545: Please address bug reports to boehm@acm.org. If you are
546: contemplating a major addition, you might also send mail to ask whether
547: it's already been done (or whether we tried and discarded it).
548:
E-mail: