unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Konstantin Kharlamov <hi-angel@yandex.ru>
Cc: 45200@debbugs.gnu.org
Subject: bug#45200: Memory leaks: (garbage-collect) fails to reclaim memory
Date: Sun, 13 Dec 2020 00:53:57 -0500	[thread overview]
Message-ID: <E1koKKT-0007bp-7N@fencepost.gnu.org> (raw)
In-Reply-To: <9f49e5542f303736d2e53ce3dc53c1374969e6b4.camel@yandex.ru> (message from Konstantin Kharlamov on Sun, 13 Dec 2020 01:44:13 +0300)

> From: Konstantin Kharlamov <hi-angel@yandex.ru>
> Cc: 45200@debbugs.gnu.org
> Date: Sun, 13 Dec 2020 01:44:13 +0300
> 
> Alright, fair enough. I crafted up another testcase, it may be better. The following code first temporarily disables GC, then it prints "hello" 1000000 times, and finally it calls GC manually.
> 
> I call `emacs -Q`, then measure PSS, then evaluate the code below, then again measure PSS.
> 
>     (let ((i 1000000))
>       (setq gc-cons-threshold most-positive-fixnum)
>       (while (> i 0)
>         (print "hello")
>         (setq i (- i 1)))
>       (garbage-collect))
> 
> The loop takes 20-30 seconds for me, I think. PSS before is ≈41M, and PSS after is 266.3M. That is ≈200M of memory just vanished.

That memory hasn't vanished, it is in your libc's malloc arena,
available for future allocations.  When and if it will be given back
to the OS is up to the specifics of the malloc implementation.  E.g.,
when I do the above on MS-Windows, where malloc is more eager to return
memory to the OS, I end up with just 40 MB footprint, and if I then
invoke GC manually, the memory goes down almost to the original value:
14 MB vs 12 MB after startup.

There are many places on the Internet which explain why the memory
footprint of a program doesn't go back to the original value even
though the program frees all the heap memory it allocated.  I suggest
to read some of those explanations.

> Regarding, whether it is stack size:
> 
>      λ grep VmStk /proc/283047/status
>     VmStk:       132 kB
> 
> Apparently, it is not stack size.

This is a misunderstanding.  The space allocated for the stack doesn't
need to grow.  Values are pushed and popped there depending on the
callstack depth, and Emacs regards anything on the stack that looks
like a Lisp value or a pointer to a Lisp value as an indication that
this Lisp value is in use, and shouldn't be GC'd.





  parent reply	other threads:[~2020-12-13  5:53 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-12 18:43 bug#45200: Memory leaks: (garbage-collect) fails to reclaim memory Konstantin Kharlamov
2020-12-12 20:15 ` Eli Zaretskii
2020-12-12 22:44   ` Konstantin Kharlamov
2020-12-12 22:59     ` Lars Ingebrigtsen
2020-12-13  6:08       ` Eli Zaretskii
2020-12-13  5:53     ` Eli Zaretskii [this message]
2020-12-13 12:07       ` Konstantin Kharlamov
2021-01-24 15:24 ` bug#45200: [PATCH] Force Glibc to free the memory freed Konstantin Kharlamov
2021-01-24 15:40   ` Eli Zaretskii
2021-01-25 22:17     ` DJ Delorie
2021-01-25 22:28       ` Konstantin Kharlamov
2021-01-26 14:55         ` Eli Zaretskii
2021-01-26 15:02           ` Konstantin Kharlamov
2021-01-26 15:30           ` Stefan Monnier
2021-02-02 21:17             ` Konstantin Kharlamov
2021-02-03  4:45               ` Stefan Monnier
2021-02-03  4:50                 ` Stefan Monnier
2021-02-03  6:04                   ` Konstantin Kharlamov
2021-02-03  7:07                     ` Eli Zaretskii
2021-02-03  7:15                       ` Konstantin Kharlamov
2021-02-03  7:39                     ` martin rudalics
2021-02-03  8:23                       ` Konstantin Kharlamov
2021-02-03  9:35                         ` martin rudalics
2021-02-03  9:49                           ` Konstantin Kharlamov
2021-02-03 10:35                             ` Konstantin Kharlamov
2021-02-03 11:06                             ` martin rudalics
2021-02-03 11:08                               ` Konstantin Kharlamov
2021-02-03 11:16                                 ` Konstantin Kharlamov
2021-02-03 12:56                                 ` martin rudalics
2021-02-03 13:00                                   ` Konstantin Kharlamov
2021-02-03 15:14                                     ` martin rudalics
2021-02-03 15:15                                     ` Stefan Monnier
2021-02-03 15:29                                       ` Konstantin Kharlamov
2021-02-03 16:02                                         ` Stefan Monnier
2021-02-03 16:35                                           ` Konstantin Kharlamov
2021-02-03 16:51                                             ` Stefan Monnier
2021-02-03 19:30                                               ` DJ Delorie
2021-02-03 19:36                                             ` DJ Delorie
2021-02-03 20:28                                               ` Konstantin Kharlamov
2021-02-03 20:51                                                 ` DJ Delorie
2021-05-18 20:12                                           ` Konstantin Kharlamov
2021-05-19  4:11                                             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-19  4:26                                               ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-05-19  6:46                                                 ` Konstantin Kharlamov
2021-05-19  9:47                                                   ` Eli Zaretskii
2021-05-19  9:55                                                     ` Konstantin Kharlamov
2021-05-19 10:09                                                       ` Eli Zaretskii
2021-02-03 14:51                             ` Eli Zaretskii
2021-02-03 15:01                               ` Konstantin Kharlamov
2021-02-03 14:44                         ` Eli Zaretskii
2021-02-03 15:12                           ` Andreas Schwab
2021-02-03 19:25                           ` DJ Delorie
2021-02-03 19:49                             ` Eli Zaretskii
2021-02-03 21:00                               ` DJ Delorie
2021-02-03 20:24                             ` Stefan Monnier
2021-02-03 20:42                               ` DJ Delorie
2021-02-03 22:07                                 ` Stefan Monnier
2021-02-03 22:21                                   ` DJ Delorie
2021-02-03 23:32                                     ` Stefan Monnier
2021-02-04  0:31                                       ` DJ Delorie
2021-02-04  3:26                                         ` Stefan Monnier
2021-02-04  3:38                                           ` DJ Delorie
2021-02-04  3:55                                             ` Stefan Monnier
2021-02-04  4:02                                               ` DJ Delorie
2021-02-04  4:19                                                 ` Stefan Monnier
2021-02-04  4:26                                                   ` DJ Delorie
2021-02-04  4:04                                               ` DJ Delorie
2021-02-03 15:15                     ` Stefan Monnier
2021-01-26 14:49       ` Eli Zaretskii
2021-01-26 16:13         ` DJ Delorie
2021-12-04 23:20     ` bug#45200: Memory leaks: (garbage-collect) fails to reclaim memory Lars Ingebrigtsen
2021-12-05  6:23       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-12-05  8:26         ` Eli Zaretskii
2022-05-01  9:43           ` bug#45200: Wishlist: There should be a `malloc-trim' function Lars Ingebrigtsen
2021-12-05 19:59         ` bug#45200: Memory leaks: (garbage-collect) fails to reclaim memory Lars Ingebrigtsen
2021-12-05  7:07       ` Eli Zaretskii
2021-01-24 18:51 ` Stefan Monnier
2021-01-24 19:00   ` Konstantin Kharlamov
2021-01-24 19:06     ` Konstantin Kharlamov
2021-01-24 19:55       ` Eli Zaretskii
2021-01-24 19:12     ` Stefan Monnier
2021-01-24 20:00       ` Konstantin Kharlamov
2021-01-24 20:11         ` Eli Zaretskii
2021-01-24 20:21           ` Konstantin Kharlamov
2021-01-24 21:20             ` Stefan Monnier
2021-01-24 21:26               ` Konstantin Kharlamov
2021-01-24 21:41                 ` Stefan Monnier
2021-01-24 21:55                   ` Konstantin Kharlamov

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=E1koKKT-0007bp-7N@fencepost.gnu.org \
    --to=eliz@gnu.org \
    --cc=45200@debbugs.gnu.org \
    --cc=hi-angel@yandex.ru \
    /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 public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).