diff --git a/code/gc.lisp b/code/gc.lisp index 7932f262559850fe881760a809f40c67ee06e208..429c26ec20a7ba66563f10d1781146e2e5f138fc 100644 --- a/code/gc.lisp +++ b/code/gc.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/gc.lisp,v 1.22 1997/11/04 09:10:44 dtc Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/gc.lisp,v 1.23 1997/11/04 16:00:14 dtc Exp $") ;;; ;;; ********************************************************************** ;;; @@ -301,7 +301,8 @@ ;;;; Internal GC -(alien:def-alien-routine collect-garbage c-call:int) +(alien:def-alien-routine collect-garbage c-call:int + #+gencgc (last-gen c-call:int)) #-ibmrt (alien:def-alien-routine set-auto-gc-trigger c-call:void @@ -353,7 +354,9 @@ ;;; called. The FORCE-P flags controls if a GC should occur even if the ;;; dynamic usage is not greater than *GC-TRIGGER*. ;;; -(defun sub-gc (&key (verbose-p *gc-verbose*) force-p) +;;; For GENCGC all generations < GEN will be GC'ed. +;;; +(defun sub-gc (&key (verbose-p *gc-verbose*) force-p #+gencgc (gen 0)) (unless *already-maybe-gcing* (let* ((*already-maybe-gcing* t) (start-time (get-internal-run-time)) @@ -383,7 +386,10 @@ (carefully-funcall hook)) (when *gc-trigger* (clear-auto-gc-trigger)) - (funcall *internal-gc*) + #-gencgc (funcall *internal-gc*) + #+gencgc (if (eq *internal-gc* #'collect-garbage) + (funcall *internal-gc* gen) + (funcall *internal-gc*)) (let* ((post-gc-dyn-usage (dynamic-usage)) (bytes-freed (- pre-gc-dyn-usage post-gc-dyn-usage))) (when *last-bytes-in-use* @@ -420,11 +426,20 @@ ;;; ;;; This is the user advertised garbage collection function. ;;; +#-gencgc (defun gc (&optional (verbose-p *gc-verbose*)) "Initiates a garbage collection. The optional argument, VERBOSE-P, which defaults to the value of the variable *GC-VERBOSE* controls whether or not GC statistics are printed." (sub-gc :verbose-p verbose-p :force-p t)) +;;; +#+gencgc +(defun gc (&key (verbose *gc-verbose*) (gen 0) (full nil)) + "Initiates a garbage collection. The keyword :VERBOSE, which + defaults to the value of the variable *GC-VERBOSE* controls whether or + not GC statistics are printed. The keyword :GEN defaluts to 0, and + controls the number of generations to garbage collect." + (sub-gc :verbose-p verbose :force-p t :gen (if full 6 gen))) ;;;; Auxiliary Functions. diff --git a/code/purify.lisp b/code/purify.lisp index cd07f6dec64fa7464a9f5c4f015c0ad10edd0615..1bdf54187c433ae80772419a6ffafad875f4d6f5 100644 --- a/code/purify.lisp +++ b/code/purify.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/purify.lisp,v 1.18 1994/10/31 04:11:27 ram Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/purify.lisp,v 1.19 1997/11/04 16:00:16 dtc Rel $") ;;; ;;; ********************************************************************** ;;; @@ -71,5 +71,6 @@ #'(lambda (&rest ignore) (declare (ignore ignore)) (write-line "Done.]")))) - (gc t)) + #-gencgc (gc t) + #+gencgc (gc :verbose t)) nil) diff --git a/code/save.lisp b/code/save.lisp index e752b6ad439b95820d28905b80552b7ecd5e4f50..090755c8e02d49cc585749c6512f816707091e0f 100644 --- a/code/save.lisp +++ b/code/save.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/save.lisp,v 1.31 1997/03/15 16:58:59 dtc Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/save.lisp,v 1.32 1997/11/04 16:00:15 dtc Exp $") ;;; ;;; ********************************************************************** ;;; @@ -153,7 +153,7 @@ (if purify (purify :root-structures root-structures :environment-name environment-name) - (gc)) + #-gencgc (gc) #+gencgc (gc :full t)) (dolist (f *before-save-initializations*) (funcall f)) (flet ((restart-lisp ()