all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Dan Nicolaescu <dann@ics.uci.edu>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: 4287@emacsbugs.donarmstrong.com
Subject: bug#4287: reducing emacs size by more frequent garbage-collect calls in loadup.el
Date: Sat, 29 Aug 2009 23:09:10 -0700 (PDT)	[thread overview]
Message-ID: <200908300609.n7U69Axh009778@godzilla.ics.uci.edu> (raw)
In-Reply-To: <jwviqg69ue8.fsf-monnier+emacsbugreports@gnu.org> (Stefan Monnier's message of "Sat, 29 Aug 2009 17:34:35 -0400")

Stefan Monnier <monnier@iro.umontreal.ca> writes:

  > > As the Subject says, replacing each `load' line in loadup.el with 
  > > `load' + `garbage-collect' will reduce the size of the stripped emacs
  > > binary: (.7 is before, .8 is after the change)
  > 
  > > $ ls -l emacs-23.1.50.8 emacs-23.1.50.7
  > > -rwx------ 1 dann dann 6722788 Jul 24 14:20 emacs-23.1.50.8*
  > > -rwx------ 1 dann dann 6857956 Jul 24 14:20 emacs-23.1.50.7*
  > 
  > > $ size  emacs-23.1.50.8 emacs-23.1.50.7
  > >    text    data     bss     dec     hex filename
  > > 1883659 4833256       0 6716915  667df3 emacs-23.1.50.8
  > > 1883659 4968424       0 6852083  688df3 emacs-23.1.50.7
  > 
  > > so we get about 2% reduction by doing something very simple and safe... 
  > 
  > > [This happens because loading multiple files generate more garbage that
  > > can be collected, but it is not returned to the OS, so it appears in
  > > the dumped image].
  > 
  > > See the discussion on this topic on emacs-devel:
  > > http://permalink.gmane.org/gmane.emacs.devel/113176
  > 
  > Can you show the patch?

Sure:

--- loadup.el.~1.180.~	2009-08-20 23:31:53.000000000 -0700
+++ loadup.el	2009-08-29 23:02:34.000000000 -0700
@@ -57,30 +57,49 @@
 (setq buffer-undo-list t)
 
 (load "emacs-lisp/byte-run")
+(garbage-collect)
 (load "emacs-lisp/backquote")
+(garbage-collect)
 (load "subr")
+(garbage-collect)
 
 ;; We specify .el in case someone compiled version.el by mistake.
 (load "version.el")
+(garbage-collect)
 
 (load "widget")
+(garbage-collect)
 (load "custom")
+(garbage-collect)
 (load "emacs-lisp/map-ynp")
+(garbage-collect)
 (load "cus-start")
+(garbage-collect)
 (load "international/mule")
+(garbage-collect)
 (load "international/mule-conf.el") ;Don't get confused if someone compiled this by mistake.
+(garbage-collect)
 (load "env")
+(garbage-collect)
 (load "format")
+(garbage-collect)
 (load "bindings")
+(garbage-collect)
 (setq load-source-file-function 'load-with-code-conversion)
 (load "files")
+(garbage-collect)
 
 (load "cus-face")
+(garbage-collect)
 (load "faces")  ; after here, `defface' may be used.
+(garbage-collect)
 (load "minibuffer")
+(garbage-collect)
 
 (load "button")
+(garbage-collect)
 (load "startup")
+(garbage-collect)
 
 (message "Lists of integers (garbage collection statistics) are normal output")
 (message "while building Emacs; they do not indicate a problem.")
@@ -94,133 +113,220 @@
 
 (message "%s" (garbage-collect))
 (load "abbrev")         ;lisp-mode.el and simple.el use define-abbrev-table.
+(garbage-collect)
 (load "simple")
+(garbage-collect)
 
 (load "help")
+(garbage-collect)
 
 (load "jka-cmpr-hook")
+(garbage-collect)
 (load "epa-hook")
+(garbage-collect)
 ;; Any Emacs Lisp source file (*.el) loaded here after can contain
 ;; multilingual text.
 (load "international/mule-cmds")
+(garbage-collect)
 (load "case-table")
+(garbage-collect)
 (load "international/characters")
+(garbage-collect)
 (load "composite")
+(garbage-collect)
 ;; This file doesn't exist when building Emacs from CVS.  It is
 ;; generated just after temacs is build.
 (load "international/charprop.el" t)
+(garbage-collect)
 
 ;; Load language-specific files.
 (load "language/chinese")
+(garbage-collect)
 (load "language/cyrillic")
+(garbage-collect)
 (load "language/indian")
+(garbage-collect)
 (load "language/sinhala")
+(garbage-collect)
 (load "language/english")
+(garbage-collect)
 (load "language/ethiopic")
+(garbage-collect)
 (load "language/european")
+(garbage-collect)
 (load "language/czech")
+(garbage-collect)
 (load "language/slovak")
+(garbage-collect)
 (load "language/romanian")
+(garbage-collect)
 (load "language/greek")
+(garbage-collect)
 (load "language/hebrew")
+(garbage-collect)
 (load "language/japanese")
+(garbage-collect)
 (load "language/korean")
+(garbage-collect)
 (load "language/lao")
+(garbage-collect)
 (load "language/tai-viet")
+(garbage-collect)
 (load "language/thai")
+(garbage-collect)
 (load "language/tibetan")
+(garbage-collect)
 (load "language/vietnamese")
+(garbage-collect)
 (load "language/misc-lang")
+(garbage-collect)
 (load "language/utf-8-lang")
+(garbage-collect)
 (load "language/georgian")
+(garbage-collect)
 (load "language/khmer")
+(garbage-collect)
 (load "language/burmese")
+(garbage-collect)
 (load "language/cham")
+(garbage-collect)
 
 (load "indent")
+(garbage-collect)
 (load "window")
+(garbage-collect)
 (load "frame")
+(garbage-collect)
 (load "term/tty-colors")
+(garbage-collect)
 (load "font-core")
+(garbage-collect)
 ;; facemenu must be loaded before font-lock, because `facemenu-keymap'
 ;; needs to be defined when font-lock is loaded.
 (load "facemenu")
+(garbage-collect)
 (load "emacs-lisp/syntax")
+(garbage-collect)
 (load "font-lock")
+(garbage-collect)
 (load "jit-lock")
+(garbage-collect)
 
 (if (fboundp 'track-mouse)
     (progn
       (load "mouse")
+      (garbage-collect)
       (and (boundp 'x-toolkit-scroll-bars)
-	   (load "scroll-bar"))
-      (load "select")))
+	   (load "scroll-bar")
+	   (garbage-collect))
+      (load "select")
+      (garbage-collect)))
 (load "emacs-lisp/timer")
+(garbage-collect)
 (load "isearch")
+(garbage-collect)
 (load "rfn-eshadow")
+(garbage-collect)
 
 (message "%s" (garbage-collect))
 (load "menu-bar")
+(garbage-collect)
 (load "paths.el")  ;Don't get confused if someone compiled paths by mistake.
+(garbage-collect)
 (load "emacs-lisp/lisp")
+(garbage-collect)
 (load "textmodes/page")
+(garbage-collect)
 (load "register")
+(garbage-collect)
 (load "textmodes/paragraphs")
+(garbage-collect)
 (load "emacs-lisp/lisp-mode")
+(garbage-collect)
 (load "textmodes/text-mode")
+(garbage-collect)
 (load "textmodes/fill")
 (message "%s" (garbage-collect))
 
 (load "replace")
+(garbage-collect)
 (load "buff-menu")
+(garbage-collect)
 
 (if (fboundp 'x-create-frame)
     (progn
       (load "fringe")
+      (garbage-collect)
       (load "image")
+      (garbage-collect)
       (load "international/fontset")
+      (garbage-collect)
       (load "dnd")
+      (garbage-collect)
       (load "mwheel")
-      (load "tool-bar")))
+      (garbage-collect)
+      (load "tool-bar")
+      (garbage-collect)))
 (if (featurep 'x)
     (progn
       (load "x-dnd")
+      (garbage-collect)
       (load "term/common-win")
-      (load "term/x-win")))
+      (garbage-collect)
+      (load "term/x-win")
+      (garbage-collect)))
 
 (message "%s" (garbage-collect))
 
 (if (eq system-type 'windows-nt)
     (progn
       (load "w32-vars")
+      (garbage-collect)
       (load "term/common-win")
+      (garbage-collect)
       (load "term/w32-win")
+      (garbage-collect)
       (load "ls-lisp")
+      (garbage-collect)
       (load "disp-table")
+      (garbage-collect)
       (load "dos-w32")
-      (load "w32-fns")))
+      (garbage-collect)
+      (load "w32-fns")
+      (garbage-collect)))
 (if (eq system-type 'ms-dos)
     (progn
       (load "dos-w32")
+      (garbage-collect)
       (load "dos-fns")
+      (garbage-collect)
       (load "dos-vars")
+      (garbage-collect)
       ;; Don't load term/common-win: it isn't appropriate for the `pc'
       ;; ``window system'', which generally behaves like a terminal.
       (load "term/pc-win")
+      (garbage-collect)
       (load "ls-lisp")
-      (load "disp-table"))) ; needed to setup ibm-pc char set, see internal.el
+      (garbage-collect)
+      (load "disp-table")
+      (garbage-collect))) ; needed to setup ibm-pc char set, see internal.el
 (if (featurep 'ns)
     (progn
       (load "emacs-lisp/easymenu")  ;; for platform-related menu adjustments
-      (load "term/ns-win")))
+      (garbage-collect)
+      (load "term/ns-win")
+      (garbage-collect)))
 (if (fboundp 'atan)	; preload some constants and
     (progn		; floating pt. functions if we have float support.
-      (load "emacs-lisp/float-sup")))
+      (load "emacs-lisp/float-sup")
+      (garbage-collect)))
 (message "%s" (garbage-collect))
 
 (load "vc-hooks")
+(garbage-collect)
 (load "ediff-hook")
-(if (fboundp 'x-show-tip) (load "tooltip"))
+(garbage-collect)
+(if (fboundp 'x-show-tip) (progn (load "tooltip") (garbage-collect)))
 
 (message "%s" (garbage-collect))
 





  reply	other threads:[~2009-08-30  6:09 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200909170617.n8H6HvDs020712@godzilla.ics.uci.edu>
2009-08-29 18:41 ` bug#4287: reducing emacs size by more frequent garbage-collect calls in loadup.el Dan Nicolaescu
2009-08-29 21:34   ` Stefan Monnier
2009-08-30  6:09     ` Dan Nicolaescu [this message]
2009-08-30 18:00       ` Eli Zaretskii
2009-08-30 20:04       ` Stefan Monnier
2009-08-30 20:45         ` Juanma Barranquero
2009-08-31 14:46           ` bug#4287: reducing emacs size by more frequent garbage-collect Stefan Monnier
2009-09-01 11:44             ` Juanma Barranquero
2009-09-01 16:21               ` Stefan Monnier
2009-09-01 21:33                 ` Juanma Barranquero
2009-08-30 23:55         ` bug#4287: reducing emacs size by more frequent garbage-collect calls in loadup.el Juri Linkov
2009-08-31  4:25         ` Dan Nicolaescu
2009-08-31 14:49           ` Stefan Monnier
2009-09-01  0:57             ` Dan Nicolaescu
2009-09-17  6:25   ` bug#4287: marked as done (reducing emacs size by more frequent garbage-collect calls in loadup.el) Emacs bug Tracking System

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200908300609.n7U69Axh009778@godzilla.ics.uci.edu \
    --to=dann@ics.uci.edu \
    --cc=4287@emacsbugs.donarmstrong.com \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.