Tener un vistazo a la documentación JNI aquí: http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.htmlJNI EnsureLocalCapacity - WHY?
Específicamente, mira lo que se dice en la descripción de la función EnsureLocalCapacity:
Para compatibilidad con versiones anteriores, la máquina virtual asigna referencias locales más allá de el asegurado capacidad. (Como soporte de depuración, la VM puede dar al usuario avisos de que se están creando demasiadas referencias locales. En el JDK, el programador puede suministrar la opción de línea de comando -verbose: jni a activar estos mensajes). llama a FatalError si no se pueden crear más referencias locales más allá de la capacidad asegurada.
Y, además, observe cómo PushLocalFrame toma un argumento de "capacidad". (Y por cierto, no menciona si esto es un límite difícil, o un límite suave como con EnsureLocalCapacity).
Dónde se encuentra exactamente todas estas tonterías acerca de la capacidad local de referencia viene? Los documentos dicen que VM estará dispuesta a asignar referencias más allá de la capacidad formal actual, ¿por qué no lo hace y mantiene toda esta capacidad desordenada de la API?
Para dar una analogía a C, se siente como si me pidieran pre-planificar cuántas llamadas malloc() voy a hacer, y se siente un poco ridículo.
¿Hay algo importante que no estoy viendo aquí?