Werfen Sie einen Blick auf die JNI-Dokumente hier: http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html
Schauen Sie sich insbesondere an, was in der Beschreibung der Funktion EnsureLocalCapacity gesagt wird:
Aus Gründen der Abwärtskompatibilität weist die VM lokale Referenzen über die gesicherte Kapazität. (Als Unterstützung bei der Fehlersuche kann die VM die Benutzer Warnungen ausgeben, dass zu viele lokale Referenzen erstellt werden. Im JDK kann der Programmierer die Befehlszeilenoption -verbose:jni angeben, um diese Meldungen einschalten). Die VM ruft FatalError auf, wenn keine weiteren lokalen Referenzen über die gesicherte Kapazität hinaus erstellt werden können.
Und sehen Sie sich außerdem an, wie PushLocalFrame ein "Kapazitäts"-Argument entgegennimmt. (Übrigens wird nicht erwähnt, ob es sich dabei um eine harte Grenze oder eine weiche Grenze wie bei EnsureLocalCapacity handelt).
Woher kommt dieser ganze Unsinn über die lokale Referenzkapazität? In den Unterlagen steht, dass VM bereit ist, Referenzen über die derzeitige formale Kapazität hinaus zuzuweisen. Warum also tut es das nicht einfach und hält dieses ganze Kapazitätswirrwarr aus der API heraus?
Um eine Analogie zu C zu ziehen: Es fühlt sich an, als würde man von mir verlangen, im Voraus zu planen, wie viele malloc()-Aufrufe ich machen werde, und das fühlt sich ein bisschen lächerlich an.
Gibt es etwas Wichtiges, das ich hier nicht sehe?