Am 30.04.15 um 18:11 schrieb Cecil Westerhof:
Op Thursday 30 Apr 2015 16:03 CEST schreef Michael Torrie:

On 04/30/2015 01:07 AM, Cecil Westerhof wrote:
When I do that the computer is freezed a few times. That is a
little less nice. Does not happen with Clojure when it gets an out
of memory.

A system freeze is probably due to thrashing by your operating
system as a process (in this case Python) uses more and more memory,
causing massive swapping. Clojure's heap, being a JVM-based
language, is based on JVM settings, so it may be maxing out at just
a couple of GB. Whereas Python will happily max out your swap if
your program demands the memory.

I just posted a message about that. This gets the problem also:
     l = range(int(1E9))

The problem is that after this other processes are swapped out and
have a bad performance. There is nothing that can be done about it?

So there is a positive point for working with the JVM. :-D


No, you understood this the wrong way. The JVM has a limit on the max memory size on startup, which you can give by the -Xmx option on the Oracle machine, so for instance

java -Xmx512M -jar myjar.jar

limits the memory that your program may consume to 512 megs, until the JVM kills it. The standard limit is usually fairly low and probably below your real memory, so the java program does not have the chance to max out your memory and make your computer swap.

CPython, au contraire, uses all memory it can get from the OS. The OS kills it if it uses too much. On Linux, you can set this limit yourself using ulimit. The analogue to the java call would therefore be something like

ulimit -m 512M
python mypython.py

If you set the ulimit to something smaller than your physical memory size, you also cause the program to be killed before it can use up all the memory and introduce swapping. For a fair comparison, you should set both limits to the same value and see how far you can get.

        Christian
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to