- Arrays are subject to being moved by the GC, so even if you could get the address they could move.
- Arrays are limited to around 16 GB, and that's if you're packing data into longs.
- Accessing an array involves a bounds check, which may float out of a loop, but may well not.
- Arrays cannot be allocated with memory that is anything except mapped private.
I use Unsafe to put memory into a location where I can get a stable native address in order to make native calls using it. Using an array would not allow that.