Eu sou um Game Developer então visto que a stack suporta somente 64kb, veja a IMPOSSIBILIDADE de por exemplo carregar um modelo 3D de 7MB por exemplo.
O OpenGL se comunica somente utilizando Buffers, é da especificação dele, não existe saida, use buffers ou nao use OpenGL.
Sendo assim, é impossível trabalhar com game dev no java sem alocar conteudo na Heap.
Certo. Agora algumas considerações:
Os ponteiros C/C++ (que atuam como buffers) tem um endereço qualquer.
Structs C/C++ podem, se feita a implementação JNI correta, ser “convertidas” em classes Java.
A classe Java, para um FloatBuffer por exemplo, teria basicamente 2 campos: um int que guarda o endereço de memoria, visto que um endereço de memoria é um hexadecimal ele pode ser convertido para decimal facilmente e uma float array.
Uma outra classe poderia ter metodos para alocação e desalocação da memoria utilizando metodos nativos.
Quando no Java eu chamasse MintFloatBuffer mfb = BufferAllocator.mallocFloat(16) ele criasse na heap um buffer “cheio” de zeros e retornasse o endereço da memoria desse buffer e sua float array vazia e utilizando outros metodos metodos nativos para preencher os campos do buffer.
Com isso seria possivel alocar grandes dados de arquivos de forma bem mais rapida que ficar quebrando o arquivo e passando partes deles (coisa aliais impossivel no OpenGL vc precisa de TODOS os dados completos duma vez).