Terms of mismatch between Netlogo

Can someone explain why there is a performance difference between the next two segments? It is statistically significant that the second timer request reports a lower number than the first timer call. My only thoughts would be that Netlogo could cache turtles in memory. Is this the expected behavior or is there an error?

to setup
  clear-all
  crt 100
  let repetitions 10000

  ;;Timing assigning x to self
  reset-timer
  repeat repetitions
  [
   ask turtles
   [
     let x self 
   ] 

  ]
  show timer

  ;;Timing assigning x to who of self
  reset-timer
  repeat repetitions
  [
    ask turtles
    [
     let x [who] of self 
    ]
  ]
  show timer
end
+4
source share
1 answer

This is not because of anything in NetLogo itself, but because NetLogo works in the JVM . The JVM learns to optimize the code, the more it runs it as part of the compilation at the exact moment in time (JIT) .

JVM , . , , :

observer> setup
observer: 0.203
observer: 0.094
observer> setup
observer: 0.136
observer: 0.098
observer> setup
observer: 0.13
observer: 0.097
observer> setup
observer: 0.119
observer: 0.095
observer> setup
observer: 0.13
observer: 0.09

let x self ( , )! , , setup. JVM JIT.

, , :

observer> setup
observer: 0.088
observer: 0.071
observer> setup
observer: 0.094
observer: 0.072
observer> setup
observer: 0.065
observer: 0.075
observer> setup
observer: 0.067
observer: 0.071
observer> setup
observer: 0.067
observer: 0.068

let x self ( ), , . , . NetLogo

JVM JIT , , . , -.

+6