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!

Cheers,
Alex

Reply via email to