From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dan Nicolaescu Newsgroups: gmane.emacs.bugs 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) Message-ID: <200908300609.n7U69Axh009778@godzilla.ics.uci.edu> References: <200908291841.n7TIfw4E003762@godzilla.ics.uci.edu> Reply-To: Dan Nicolaescu , 4287@emacsbugs.donarmstrong.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1251613640 14382 80.91.229.12 (30 Aug 2009 06:27:20 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 30 Aug 2009 06:27:20 +0000 (UTC) Cc: 4287@emacsbugs.donarmstrong.com To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Aug 30 08:27:12 2009 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1Mhdsc-0000HA-Gt for geb-bug-gnu-emacs@m.gmane.org; Sun, 30 Aug 2009 08:27:12 +0200 Original-Received: from localhost ([127.0.0.1]:33995 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Mhdsb-0007F8-IW for geb-bug-gnu-emacs@m.gmane.org; Sun, 30 Aug 2009 02:27:09 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MhdsV-0007Bq-Ur for bug-gnu-emacs@gnu.org; Sun, 30 Aug 2009 02:27:04 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MhdsR-0007AI-SE for bug-gnu-emacs@gnu.org; Sun, 30 Aug 2009 02:27:03 -0400 Original-Received: from [199.232.76.173] (port=45936 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MhdsR-0007AF-Ll for bug-gnu-emacs@gnu.org; Sun, 30 Aug 2009 02:26:59 -0400 Original-Received: from rzlab.ucr.edu ([138.23.92.77]:41582) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MhdsQ-0004EN-VF for bug-gnu-emacs@gnu.org; Sun, 30 Aug 2009 02:26:59 -0400 Original-Received: from rzlab.ucr.edu (rzlab.ucr.edu [127.0.0.1]) by rzlab.ucr.edu (8.14.3/8.14.3/Debian-5) with ESMTP id n7U6QsU4000816; Sat, 29 Aug 2009 23:26:54 -0700 Original-Received: (from debbugs@localhost) by rzlab.ucr.edu (8.14.3/8.14.3/Submit) id n7U6F5RH031186; Sat, 29 Aug 2009 23:15:05 -0700 Resent-Date: Sat, 29 Aug 2009 23:15:05 -0700 X-Loop: owner@emacsbugs.donarmstrong.com Resent-From: Dan Nicolaescu Resent-To: bug-submit-list@donarmstrong.com Resent-CC: Emacs Bugs 2Resent-Date: Sun, 30 Aug 2009 06:15:05 +0000 Resent-Message-ID: Resent-Sender: owner@emacsbugs.donarmstrong.com X-Emacs-PR-Message: followup 4287 X-Emacs-PR-Package: emacs X-Emacs-PR-Keywords: Original-Received: via spool by 4287-submit@emacsbugs.donarmstrong.com id=B4287.125161256930244 (code B ref 4287); Sun, 30 Aug 2009 06:15:05 +0000 Original-Received: (at 4287) by emacsbugs.donarmstrong.com; 30 Aug 2009 06:09:29 +0000 X-Spam-Bayes: score:0.5 Bayes not run. spammytokens:Tokens not available. hammytokens:Tokens not available. Original-Received: from barrelv2.ics.uci.edu (barrelv2.ics.uci.edu [128.195.1.114]) by rzlab.ucr.edu (8.14.3/8.14.3/Debian-5) with ESMTP id n7U69SWk030231 for <4287@emacsbugs.donarmstrong.com>; Sat, 29 Aug 2009 23:09:29 -0700 Original-Received: from godzilla.ics.uci.edu (godzilla.ics.uci.edu [128.195.10.101]) by barrelv2.ics.uci.edu (8.13.8+Sun/8.13.8) with ESMTP id n7U69BDX022165; Sat, 29 Aug 2009 23:09:11 -0700 (PDT) Original-Received: (from dann@localhost) by godzilla.ics.uci.edu (8.13.8+Sun/8.13.6/Submit) id n7U69Axh009778; Sat, 29 Aug 2009 23:09:10 -0700 (PDT) In-Reply-To: (Stefan Monnier's message of "Sat, 29 Aug 2009 17:34:35 -0400") Original-Lines: 310 X-ICS-MailScanner-Information: Please contact the ISP for more information X-ICS-MailScanner-ID: n7U69BDX022165 X-ICS-MailScanner: Found to be clean X-ICS-MailScanner-SpamCheck: not spam, SpamAssassin (score=0.336, required 5, autolearn=disabled, ALL_TRUSTED -1.44, FF_IHOPE_YOU_SINK 1.70, TW_RW 0.08) X-ICS-MailScanner-From: dann@godzilla.ics.uci.edu X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) Resent-Date: Sun, 30 Aug 2009 02:27:03 -0400 X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:30657 Archived-At: Stefan Monnier 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))