Если вызывается JNI DeleteGlobalRef (), будет ли соответствующий объект Java собираться мусором?

Я имею в виду, что если я создаю глобальный ссылочный объект задания на C ++, а затем передаю его некоторому Java-коду , и удалить вызов DeleteGlobalRef (), является ли этот базовый объект java, потенциально собираемым сразу же, мусором, чтобы любой будущий код Java, который уже ссылается на этот объект, мог бы вернуться с исключением NullPointerException? В частности, если у меня есть код C ++, который выполняет что-то вроде этого упрощенного примера:

static jobject myObjGlobalRef;
static JNIEnv* env = /* call to create a JVM and get the JNI env */;
jobject ReturnMyObj()
{
    /* <<Code that defines class, constructorId, and param1 goes here>> */

    jobject localObj = env->NewObject(class, constructorId, param1);
    myObjGlobalRef = env->NewGlobalRef(localObj);
}

void DeleteMyObj()
{
    env->DeleteGlobalRef(myObjGlobalRef);
}

myObjGlobalRef = ReturnMyObj();

jobject otherExistingGlobalRef = /* Assume we get another global ref to another parent obj somewhere else */
/*  ... other code here ... */
// Invoke some method on some other pre-existing global reference that uses
// myObjGlobalRef,  lets assume this method stores the object referenced by
// myObjGlobalRef into a parent object referenced by otherExistingGlobalRef:
env->CallVoidMethod(env, otherExistingGlobalRef, addASubObjectMethodId, myObjGlobalRef);

DeleteMyObj();

// Does the pointed to by myObjGlobalRef still exist here, assuming that
// otherExistingGlobalRef now references it?

Как это работает в JNI? Является ли «GlobalReference» на объекте просто счетчиком ссылок на объект, поэтому, если я освобождаю объект задания GlobalReference, он не обязательно собирает мусор для базового java-объекта, пока все ссылки на него (например, «родительский» объект, ссылающийся на otherExistingGlobalRef it) ушли?

Если вы ответите на этот вопрос и предоставите ссылку на официальную документацию Java / Sun / Oracle, подтверждающую ваш ответ, вы получите бонусные баллы: -).

11
задан Ogre Psalm33 2 December 2010 в 16:46
поделиться