Kendi voksel motorunuzda olduğu gibi yüksek miktarda belleğe verimli bir şekilde erişmek ve bunları ayırmak için kullanın! (yani Minecraft tarzı oyun.)
Deneyimlerime göre, JVM, gerçekten ihtiyacınız olan yerde sınır kontrolünü ortadan kaldıramaz. Örneğin, büyük bir dizi üzerinden yineleme yapıyorsanız, ancak gerçek bellek erişimi döngüdeki sanal olmayan bir * yöntem çağrısının altına sıkışmışsa, JVM yine de bir kez değil, her dizi erişimiyle bir sınır denetimi gerçekleştirebilir döngü. Böylece, potansiyel olarak büyük performans kazanımları için, döngü içinde JVM sınırlarını kontrol etmeyi sun.misc.Icfefe kullanan bir yöntemle doğrudan belleğe erişerek, kendinizi doğru yerlerde kontrol ederek emin olun. (Sen şunlardır olacak sınırları doğru, bazı düzeyde kontrol?)
* Sanal olmayan bir ifadeyle, JVM'nin özel yönteminiz ne olursa olsun dinamik olarak çözmesi gerekmediği anlamına gelir, çünkü sınıf / yöntem / örneğin statik / final / neyin var olduğunu doğru bir şekilde garanti ettiğinden emin olabilirsiniz.
Evde yetiştirilen voksel motorum için bu, yığın oluşturma ve serileştirme sırasında (tüm diziye aynı anda okuduğum / yazdığım yerlerin) dramatik bir performans kazancı sağladı. Sonuçlar değişebilir, ancak sınırların ortadan kaldırılması sorununuz varsa, bu sorunu çözecektir.
Bununla ilgili bazı önemli sorunlar vardır: özellikle, arabiriminizin istemcilerine sınır denetimi yapmadan belleğe erişebilmenizi sağladığınızda, muhtemelen kötüye kullanırlar. (Bilgisayar korsanlarının arayüzünüzün istemcileri olabileceğini de unutmayın ... özellikle Java ile yazılmış bir voksel motoru durumunda.) Bu nedenle, arayüzünüzü bellek erişiminin kötüye kullanılamayacağı şekilde tasarlamalısınız veya Her zamankinden çok, önce kullanıcı verileri doğrulamak için son derece dikkatli olmalıdır şimdiye sizin tehlikeli arayüzü ile karışmak. Bir bilgisayar korsanının denetlenmeyen bellek erişimiyle yapabileceği yıkıcı şeyler göz önüne alındığında, muhtemelen her iki yaklaşımı da kullanmak en iyisidir.