Вы выделяете слишком много объектов Java за один вызов функции JNI. Dalvik сообщает, что вы заняли всю таблицу ссылок на объекты (в вашем случае 1024 объекта). Поэтому используйте массивы Java или другой способ хранения ваших данных.
Каждый раз, когда вы вызываете NewStringUTF, он копирует вашу строку в память, «принадлежащую» Java, и назначает объект для управления версией Java-строки (и памятью, используемой на стороне Java). Когда ваша ссылка выходит за рамки (в приведенном выше примере, когда возвращаются нативные функции), память, выделенная Java, будет освобождена, и ссылка будет удалена.
Каждый раз, когда локальная ссылка сохраняется на стороне Java (для отслеживания объекта и его памяти), она использует слот в таблице. Я не уверен, насколько большой будет эта таблица, но я уверен, что она относительно мала, может быть, 32 записи. В вашем случае это на самом деле 1024 больших (для конкретной реализации), но в любом случае есть предел, если вы превысите его, вы получите сбой, который вы испытываете.
С точки зрения того, как обойти эту проблему, очевидным правилом является использование меньшего количества локальных ссылок. Из вашего фрагмента кода неясно, что должен делать цикл for, но приведение к (char *) указывает на фундаментальное отсутствие понимания того, что на самом деле делает код. Если вы сохранили его как jstring, у вас есть возможность впоследствии вызвать env-> DeleteLocalRef (...), чтобы удалить ссылку. В любом случае, просьба предоставить дополнительную информацию, если вы пытаетесь достичь чего-то конкретного.