[squeak-dev] Crash

David T. Lewis lewis at mail.msen.com
Thu Feb 10 03:27:18 UTC 2022

On Thu, Feb 03, 2022 at 10:30:49PM +0100, J??rg Belger wrote:
> This leads to an image/VM crash too
> 	| oc |
> 	oc := OrderedCollection new.
> 	400000000 timesRepeat: [oc add: Object new]
> This here is working for me:
> 	| oc |
> 	oc := OrderedCollection new: 400000000.
> 	400000000 timesRepeat: [oc add: Object new]
> This here is working too for me:
> 	| oc |
> 	oc := OrderedCollection new.
> 	400000000 timesRepeat: [oc add: 1]
> It seems there is possibly a memory problem in the VM.

I have tried to reproduce this on my PC with 8GB memory. I was not able
to crash the VM but it certainly locked my system up in swapping as the
test continued to use memory. Eventually I ran out of time and patience
and killed the VM process.

If there is an actual VM crash involved then maybe there is a bug. But
if you are seeing your Squeak image is just stalling out, then nothing
is wrong except for a matter of basic arithmetic.

You are trying to allocate 400,000,000 individual objects, each of which
requires 16 bytes of memory in the object memory, and you are storing
each of those objects using an 8 byte object pointer to the object in
the ordered collection. So just for the raw storage you are going to
need for those "Object new" things, you need 400,000,000 * (16 + 8)
 = 9,600,000,000 bytes. On top of that you are putting the objects into
an OrderedCollection that does not know that you are going to ask it
to hold 400,000,000 object pointers, so it has to keep extending itself
as the test proceeds.

When I tried to run this on my PC with a mere eight GB of real memory,
the operating system had to start swapping out real memory make room
for all of that activity. And every time the OrderedCollection needs
to extend its space, it is accessing real memory that probably got
swapped out to disk to make room in the 8GB of real memory space, so
basically it puts the system into a death spiral that locks up the
Squeak image (and pretty much everything else on my computer).

So I am able to reproduce the locked up image (as I would expect on my
PC with only 8GB memory) but I have not been able to reproduce a crash.

Just to clarify, are you describing a "crash" in which the actual
Squeak VM process exited unexpectedly, or was it a "crash" in the
sense of the the image locking up and becoming unresponsive? If the
latter, then most likely nothing is wrong.


More information about the Squeak-dev mailing list