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))
next prev parent 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.