Użyj go, aby uzyskać dostęp i wydajnie alokować duże ilości pamięci, na przykład we własnym silniku wokseli! (tj. gra w stylu Minecraft).
Z mojego doświadczenia wynika, że JVM często nie jest w stanie wyeliminować sprawdzania granic w miejscu, którego naprawdę potrzebujesz. Na przykład, jeśli iterujesz po dużej tablicy, ale rzeczywisty dostęp do pamięci jest schowany pod nie-wirtualnym * wywołaniem metody w pętli, JVM może nadal sprawdzać granice przy każdym dostępie do tablicy, a nie tylko raz przed pętla. Tak więc, w celu potencjalnie dużego wzrostu wydajności, możesz wyeliminować sprawdzanie granic JVM w pętli za pomocą metody, która wykorzystuje sun.misc.Unsafe do bezpośredniego dostępu do pamięci, upewniając się, że wykonujesz sprawdzanie granic we właściwych miejscach. (Ty jesteś gonna granice sprawdzić na jakimś poziomie, prawda?)
* przez nie-wirtualny, mam na myśli, że JVM nie powinien dynamicznie rozwiązywać jakiejkolwiek konkretnej metody, ponieważ poprawnie zagwarantowałeś, że klasa / metoda / instancja są kombinacją statycznego / końcowego / what-have-you.
W przypadku mojego domowego silnika wokselowego spowodowało to dramatyczny wzrost wydajności podczas generowania porcji i serializacji (w miejscach, w których odczytywałem / zapisywałem jednocześnie całą tablicę). Wyniki mogą się różnić, ale jeśli Twoim problemem jest brak eliminacji granic, to to rozwiąże.
Występują z tym potencjalnie poważne problemy: w szczególności, gdy zapewnisz dostęp do pamięci bez sprawdzania granic klientom interfejsu, prawdopodobnie wykorzystają to. (Nie zapominaj, że hakerzy mogą być również klientami twojego interfejsu ... szczególnie w przypadku silnika wokseli napisanego w Javie.) Dlatego powinieneś albo zaprojektować swój interfejs, aby nie można było nadużywać dostępu do pamięci, lub należy być bardzo ostrożnym, aby sprawdzić poprawność danych użytkowików zanim można kiedykolwiek, kiedykolwiek mieszają się ze swoim niebezpiecznym interfejsu. Biorąc pod uwagę katastrofalne rzeczy, które haker może zrobić z niekontrolowanym dostępem do pamięci, prawdopodobnie najlepiej jest zastosować oba podejścia.