[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Question about memory usage
From: |
Michał Kondraciuk |
Subject: |
Re: Question about memory usage |
Date: |
Tue, 3 Apr 2018 19:57:34 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 |
On 04/03/2018 08:28 AM, Eli Zaretskii wrote:
From: Michał Kondraciuk <k.michal@zoho.com>
Date: Mon, 2 Apr 2018 13:57:26 +0200
Basically, when I run the sexp below in emacs -Q, Emacs keeps allocating
a lot of memory. In 10 minutes, it goes from 18 MB to over 200 MB.
(while t
(with-temp-buffer
(setq buffer-undo-list nil)
(insert "a")))
Calling garbage-collect afterwards or even inside the body of the loop
doesn't help (except the loop obviously runs slower, so after 10
minutes, Emacs uses ~100 MB of memory).
What do you mean by "afterwards"? The while-loop never ends, so
there's no "afterwards" AFAIU. Am I missing something?
You're right, I meant after I stop the loop with C-g.
To answer your question: yes, I think this is expected, given that you
set buffer-undo-list to nil (what is the purpose of that, btw?).
No purpose, but some external packages display information in a way
similar to this sexp, where undo information is also recorded (needlessly):
(with-current-buffer (get-buffer-create "info")
(let ((inhibit-read-only t))
(erase-buffer)
(insert "info"))
(setq buffer-read-only t)
(display-buffer (current-buffer)))
I tested it in a loop (but also killed the "info" buffer in each
iteration) and Emacs also keeps allocating memory, as with
(with-temp-buffer (setq buffer-undo-list nil) ...).
Obviously normally this isn't a problem because you won't run this code
in a loop, but if you leave Emacs open for a long time and run this sexp
as part of some command many times, memory can accumulate (I think, it's
why I asked if Emacs will finally free this unused memory).
When Emacs ends up requesting more memory from the OS, it usually
doesn't release that memory when it is no longer needed, but keeps it
in the process's address space and reuses it if/when it needs more
memory.
But shouldn't Emacs reuse the memory from previous loop iteration
instead of allocating it? Also, if the sexp is modified like this, Emacs
memory usage is at the same level:
(while t
(with-temp-buffer
(insert "a")
(setq buffer-undo-list (list (cons (point-min) (point-max))))))
- Re: Question about memory usage, (continued)
- Re: Question about memory usage, Óscar Fuentes, 2018/04/02
- Re: Question about memory usage, Eli Zaretskii, 2018/04/03
- Re: Question about memory usage, Stefan Monnier, 2018/04/03
- Re: Question about memory usage, Eli Zaretskii, 2018/04/03
- Re: Question about memory usage, Eli Zaretskii, 2018/04/03
- Re: Question about memory usage, Stefan Monnier, 2018/04/03
- Re: Question about memory usage, Eli Zaretskii, 2018/04/03
- Re: Question about memory usage, Stefan Monnier, 2018/04/03
- Re: Question about memory usage, Eli Zaretskii, 2018/04/03
- Re: Question about memory usage, Stefan Monnier, 2018/04/03
Re: Question about memory usage,
Michał Kondraciuk <=
- Re: Question about memory usage, Eli Zaretskii, 2018/04/03
- Re: Question about memory usage, Michał Kondraciuk, 2018/04/03
- Re: Question about memory usage, Eli Zaretskii, 2018/04/04
- Re: Question about memory usage, Michał Kondraciuk, 2018/04/05
- Re: Question about memory usage, Eli Zaretskii, 2018/04/05
- Re: Question about memory usage, Stefan Monnier, 2018/04/05
- Re: Question about memory usage, Michał Kondraciuk, 2018/04/07
- Re: Question about memory usage, Eli Zaretskii, 2018/04/07
- Re: Question about memory usage, Stefan Monnier, 2018/04/07
- Re: Question about memory usage, Michał Kondraciuk, 2018/04/07