Копирует ли NewStringUTF переданный const char *

Официальный JNI API указывает, делается ли копия при создании jstring из const char *. Вот цитата:

NewStringUTF
jstring NewStringUTF(JNIEnv *env, const char *bytes);

Constructs a new java.lang.String object from an array of characters in modified UTF-8 encoding.

Означает ли это, что копия const char * сделана или я должен strdup сделать ее сам?

@apangin Спасибо. Это не имеет прямого отношения к исходному вопросу, но в случае, если я перебираю большой массив и для каждого элемента массива я создаю строку jstring и устанавливаю ее для некоторого объекта. Является ли хорошей практикой (или необходимой) вызывать DeleteLocalRef для созданного jstring на каждой итерации?

St.Antario 21.05.2019 18:42

В таких случаях DeleteLocalRef имеет смысл. Когда слишком много неиспользуемых (но не удаленных) локальных ссылок JNI, выделение новых ссылок будет страдать от накладных расходов на просмотр связанного списка JNIHandleBlocks.

apangin 21.05.2019 19:05

Я преобразовал комментарий в ответ. Что касается вашего второго вопроса, спецификация JNI прямо говорит об этом конкретном примере.

apangin 22.05.2019 01:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
480
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

NewStringUTF создает новый объект String в Java Heap. Строка поддерживается массивом byte[] или char[] в куче Java и не передает никакие данные вне кучи, которые вы передаете.

Таким образом, вам не нужно strdup, содержимое все равно будет скопировано (и, возможно, преобразовано) в Java Heap.

Другие вопросы по теме