Hi Mariano,
Hi Eliot. I am very newbie in all this stuff, so I would directly ask you if you could explain me my doubt ;)
StackInterpreter >> flushMethodCacheFrom: memStart to: memEnd
"Flush entries in the method cache only if the oop address is within the given memory range.
This reduces overagressive cache clearing. Note the AtCache is fully flushed, 70% of the time
cache entries live in newspace, new objects die young"
| probe |
probe := 0.
1 to: MethodCacheEntries do: [:i |
(methodCache at: probe + MethodCacheSelector) = 0
ifFalse: [((((self oop: (methodCache at: probe + MethodCacheSelector) isGreaterThanOrEqualTo: memStart)
and: [self oop: (methodCache at: probe + MethodCacheSelector) isLessThan: memEnd])
or: [(self oop: (methodCache at: probe + MethodCacheClass) isGreaterThanOrEqualTo: memStart)
and: [self oop: (methodCache at: probe + MethodCacheClass) isLessThan: memEnd]])
or: [(self oop: (methodCache at: probe + MethodCacheMethod) isGreaterThanOrEqualTo: memStart)
and: [self oop: (methodCache at: probe + MethodCacheMethod) isLessThan: memEnd]])
ifTrue: [methodCache at: probe + MethodCacheSelector put: 0]].
probe := probe + MethodCacheEntrySize].
1 to: AtCacheTotalSize do: [:i | atCache at: i put: 0]
But if I see
CoInterpreter >> flushMethodCache
"Flush the method cache. The method cache is flushed on every programming change and garbage collect."
1 to: MethodCacheSize do: [ :i | methodCache at: i put: 0 ].
lastMethodCacheProbeWrite := 0. "this for primitiveExternalMethod"
cogit unlinkAllSends
So....my newbie question is just why the "cogit unlinkAllSends" is not need in Cog? I mean, why cog doesn't need to do:
CoInterpreter >> flushMethodCacheFrom: memStart to: memEnd
super flushMethodCacheFrom: memStart to: memEnd .
self unlinkAllSends.
Thanks for the explanation in advance,
Mariano