【发布时间】:2011-05-31 09:18:16
【问题描述】:
要实现从本机代码到 Java 代码的回调函数,我必须使用 NewGloabRef 创建一个全局引用。从内存配置文件中,我发现,一旦我调用env->NewGlobalRef(weak_this),即使它是播放器对象的弱引用,播放器对象也将作为根对象可用,我认为这将防止它被垃圾收集。
但我的理解是弱引用不会阻止对象被垃圾回收。
//java code
Player{
native_init(new WeakReference(this)),
}
//JNi code
//listener
Listener::Listener(jobject weak_this)
{
//will use mObject for callback
mObject = env->NewGlobalRef(weak_this);
}
xxxx_Player_native_init(xxxx. Object weak_this)
{
Listener l = new Listener(weak_this);
}
编辑:
内存配置文件:
Root Object 0x2C820E10 <com/trident/tv/media/player/JniTPlayer>
com/trident/tv/media/player/JniTPlayer.trace : 0x2C83CC54 <java/lang/String>
com/trident/tv/media/player/JniTPlayer.listenerList : 0x2C820E64 <java/util/Vector>
JNI 日志
[JNI] NewGlobalRef(0x2C820E10 [com/trident/tv/media/player/JniTPlayer]) : 0x2C820E10
【问题讨论】:
标签: java garbage-collection java-native-interface