Verwenden Sie es, um effizient auf große Speichermengen zuzugreifen und diese zuzuweisen, z. B. in Ihrer eigenen Voxel-Engine! (dh Spiel im Minecraft-Stil.)
Nach meiner Erfahrung ist die JVM oft nicht in der Lage, die Überprüfung von Grenzen an den Stellen zu beseitigen, an denen Sie sie wirklich benötigen. Wenn Sie beispielsweise über ein großes Array iterieren, der tatsächliche Speicherzugriff jedoch unter einem nicht virtuellen * Methodenaufruf in der Schleife versteckt ist, führt die JVM möglicherweise weiterhin eine Überprüfung der Grenzen bei jedem Arrayzugriff durch und nicht nur einmal zuvor die Schleife. Für potenziell große Leistungssteigerungen können Sie daher die Überprüfung der JVM-Grenzen innerhalb der Schleife mithilfe einer Methode eliminieren, bei der sun.misc.Unsafe verwendet wird, um direkt auf den Speicher zuzugreifen, und sicherstellen, dass Sie die Grenzen an den richtigen Stellen überprüfen. (Sie sind Gonna Grenzen überprüfen auf einer bestimmten Ebene, nicht wahr?)
* Mit nicht virtuell meine ich, dass die JVM nicht dynamisch auflösen muss, was auch immer Ihre spezielle Methode ist, da Sie korrekt garantiert haben, dass Klasse / Methode / Instanz eine Kombination aus statisch / endgültig / was-haben-Sie sind.
Für meine selbstgebaute Voxel-Engine führte dies zu einem dramatischen Leistungsgewinn während der Chunk-Generierung und -Serialisierung (an Orten, an denen ich das gesamte Array gleichzeitig las / schrieb). Die Ergebnisse können variieren, aber wenn ein Mangel an Grenzbeseitigung Ihr Problem ist, wird dies das Problem beheben.
Hierbei gibt es einige potenziell schwerwiegende Probleme: Insbesondere wenn Sie Clients Ihrer Schnittstelle die Möglichkeit bieten, auf den Speicher zuzugreifen, ohne die Grenzen zu überprüfen, werden sie ihn wahrscheinlich missbrauchen. (Vergessen Sie nicht, dass Hacker auch Clients Ihrer Schnittstelle sein können ... insbesondere im Fall einer in Java geschriebenen Voxel-Engine.) Daher sollten Sie Ihre Schnittstelle entweder so gestalten, dass der Speicherzugriff nicht missbraucht werden kann, oder Sie sollten sehr vorsichtig sein , Benutzerdaten zu validieren , bevor es überhaupt kann, je mit gefährlicher Schnittstelle mische. Angesichts der katastrophalen Dinge, die ein Hacker mit ungeprüftem Speicherzugriff tun kann, ist es wahrscheinlich am besten, beide Ansätze zu wählen.