Usalo per accedere e allocare in modo efficiente grandi quantità di memoria, come nel tuo motore voxel! (es. gioco in stile Minecraft.)
Nella mia esperienza, la JVM spesso non è in grado di eliminare il controllo dei limiti laddove ne hai veramente bisogno. Ad esempio, se stai iterando su un array di grandi dimensioni, ma l'accesso effettivo alla memoria è nascosto sotto una chiamata di metodo * non virtuale nel ciclo, la JVM può comunque eseguire un controllo dei limiti con ogni accesso all'array, piuttosto che una volta poco prima il cappio. Pertanto, per guadagni di prestazioni potenzialmente elevati, è possibile eliminare il controllo dei limiti JVM all'interno del loop tramite un metodo che impiega sun.misc.Unsafe per accedere direttamente alla memoria, assicurandosi di eseguire qualsiasi controllo dei limiti nei punti corretti. (Lo sei gonna limiti controllare a un certo livello, giusto?)
* per non virtuale, intendo che JVM non dovrebbe risolvere dinamicamente qualunque sia il tuo metodo particolare, perché hai correttamente garantito che classe / metodo / istanza sono una combinazione di statico / finale / che-hai-te.
Per il mio motore voxel cresciuto in casa, ciò ha comportato un notevole aumento delle prestazioni durante la generazione e la serializzazione di blocchi (i posti dove stavo leggendo / scrivendo sull'intero array contemporaneamente). I risultati possono variare, ma se il problema è la mancanza di eliminazione dei limiti, questo risolverà il problema.
Ci sono alcuni problemi potenzialmente importanti con questo: in particolare, quando si fornisce la possibilità di accedere alla memoria senza controllo dei limiti ai client della propria interfaccia, probabilmente ne abuseranno. (Non dimenticare che gli hacker possono anche essere client della tua interfaccia ... specialmente nel caso di un motore voxel scritto in Java.) Quindi, dovresti progettare la tua interfaccia in modo tale da non poter abusare dell'accesso alla memoria, oppure dovresti essere estremamente attento a convalidare i dati utente prima che possano, sempre e comunque , mescolarsi con la tua interfaccia pericolosa. Considerando le cose catastrofiche che un hacker può fare con l'accesso alla memoria non controllato, probabilmente è meglio adottare entrambi gli approcci.