[Pharo-project] Problem with #garbageCollect and -memory parameter

Mariano Martinez Peck marianopeck at gmail.com
Tue Nov 30 14:43:50 CET 2010

Hi folks. I am using the standard SqueakVM  4.2.5beta1U.
If I run normaly the VM with a normal Pharo image and I print Smalltalk
garbageCollect -> I get something like  492130460

Now...if I run the vm with the parameter -memory 1500m  and I then print
Smalltalk garbageCollect -> I get a NEGATIVE number like:  -619402660

I guess there is a problem in somewhere like ObjectMemory >> bytesLeft:
but I don't know...

Anyway, the problem in my case is in SmalltalkImage:

    "Return true if either there is enough memory to do so safely or if the
user gives permission after being given fair warning."

    self garbageCollectMost > self lowSpaceThreshold ifTrue: [^ true].
    self garbageCollect > self lowSpaceThreshold ifTrue: [^ true].  "work

    ^ self confirm:
'WARNING: There is not enough space to start the low space watcher.
If you proceed, you will not be warned again, and the system may
run out of memory and crash. If you do proceed, you can start the
low space notifier when more space becomes available simply by
opening and then closing a debugger (e.g., by hitting Cmd-period.)
Do you want to proceed?'

Since both of the first answers false because, of course garbageCollectMost
and garbageCollect are negative....
then I have that poup all the time.

To fix this I have to posibilities:

1) Just patch this particular method to:

self garbageCollectMost.
self primBytesLeft > self lowSpaceThreshold ifTrue: [^ true].  "quick"
self garbageCollect
self primBytesLeft > self lowSpaceThreshold ifTrue: [^ true].  "work harder"

Notice that primBytesLeft is answering correct. Wait..I don't know if
correct, but at least possitive:  5691396
I think this is possitive because the primitive is not receiving a
parameter, and thus, Interpreter >> primitiveBytesLeft
evaluates the first part of the method, which just does self sizeOfFree:
freeBlock , and not the second part where it does self bytesLeft: aBool.

2) understand why it is negative and fix it from the VM side (I have no idea
how to do this).

Now, in addition, I wonder if there may be other places broken because of
this....I am having some crashed and I don't know why :(

Thanks in advance,

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gforge.inria.fr/pipermail/pharo-project/attachments/20101130/e93e5e91/attachment.htm>

More information about the Pharo-project mailing list