Hello
I stumbled across a performance issue when pinning objects in memory.
Below I have two scripts that pin and unpin a byte array (or any object) 20k times.
The first script pins each time a new byte array:
[ 20000 timesRepeat: [
| array wasPinned |
array := ByteArray new.
wasPinned := array pinInMemory.
array setPinnedInMemory: wasPinned.
] ] timeToRunWithoutGC. "4284"
while the second one pins the same instance of array:
array := ByteArray new.
[ 20000 timesRepeat: [
| wasPinned |
wasPinned := array pinInMemory.
array setPinnedInMemory: wasPinned.
] ] timeToRunWithoutGC "12"
However, as you can see there is a huge performance difference between these scripts.
Is it expected or is it a bug? And if it is expected what can be happening in VM that leads to such huge performance impact? Thanks!