Hi Denis, On Wed, Apr 20, 2016 at 9:15 AM, Denis Kudriashov <dionisiydk@gmail.com> wrote:
2016-04-20 17:47 GMT+02:00 Eliot Miranda <eliot.miranda@gmail.com>:
Hi Pavel,
On Apr 20, 2016, at 6:54 AM, Pavel Krivanek <pavel.krivanek@gmail.com> wrote:
That is not real amount of objects in the object memory:
count := 0. object := 0 someObject. [object == 0] whileFalse: [ count := count + 1. object := object nextObject ]. count. "->724653"
Right. allObjects size is approximately equal to Object allSubInstances (but much faster to evaluate, since it makes only a single heap traversal). Class allSubInstances answers only classes, not those class's instances.
But my test was not about Object allSubInstances but about Object allSubclasses. I supposed that "Class allSubInstances size" should equal "(Class *allSubclasses* flatCollect: [ :each | each allInstances ]) size". But it is not. And it is surprised me. Interesting to know why.
I understand. I was answering Pavel's query. Your question was answered (albeit teasingly) by Ben: "Strange that its out by a factor of two. It's almost like each class is also an object ;)". Class allSubclasses includes only the metaclasses. Object allSubclasses includes the classes too. These two (from a Squeak image) are almost equal: (Class withAllSubclasses asSet addAll: (Class allSubclasses collect: #soleInstance); yourself) size 6468 Object withAllSubclasses size 6456 Class withAllSubclasses first: 5 => an OrderedCollection(Class ProtoObject class Object class ObjectOut class ImageSegmentRootStub class) Class withAllSubclasses last: 5 an OrderedCollection(ScSmiAddOp class ScSmiEqualOp class ScSmiLessOp class ScSmiLessOrEqualOp class ScSmiNotEqualOp class) Object withAllSubclasses first: 5 => an OrderedCollection(Object BalloonState SoundCodec StandardFileMenuResult UndefinedObject) Object withAllSubclasses last: 5 => an OrderedCollection(ScSmiAddOp class ScSmiEqualOp class ScSmiLessOp class ScSmiLessOrEqualOp class ScSmiNotEqualOp class) _,,,^..^,,,_ best, Eliot