
Unrolling Java Loops at Runtime with Byte Buddy - nkurz
https://blog.bramp.net/post/2015/09/09/unrolling-loops-at-runtime-with-byte-buddy/
======
RyanZAG
Instead of manipulating byte code at runtime, wouldn't it make more sense to
use an annotation processor to just create a specialized UnsafeArrayList for
each input type you need?

With something like JavaPoet, it's fairly easy to do as well. It feels a lot
safer than manually creating byte code like that. Let javac do that for you.

EDIT: If you're not familiar with JavaPoet, check it out here:
[https://corner.squareup.com/2015/01/javapoet.html](https://corner.squareup.com/2015/01/javapoet.html)

------
MrBuddyCasino
tl;dr: HotSpot doesn't seem to optimize a data copying loop for code that uses
sun.misc.Unsafe, due to unknown reasons. Thus, we can generate bytecode at
runtime to unroll said loop to make things go twice as fast.

Does anyone know if Unsafe is indeed blacklisted for JIT optimisations?

~~~
Apanatshka
No, Unsafe is not blacklisted from JIT afaik. Although be careful that a
helper method using Unsafe usually doesn't get inlined. The problem in this
case is the loop. It ranges over a long, and where int loops get a lot of
optimisations, long loops don't (yet, they're aware of the issue)

~~~
thebramp
Do you know a way to test that the long loop is the issue? or is this an
educated guess based on your knowledge of the JIT?

