2017-10-11 8 views
0

thisthisによると、JNI内のオブジェクトへのGlobalReferenceは、オブジェクトとすべてのサブフィールドへの参照を保持します。そして、それは手動で速やかに解放しないことがメモリリークです。JNIのGlobalReferencesは、GCによるオブジェクトのクリーンアップを防止しますか?

明確に記載されていないのは、グローバル参照によってオブジェクトがGC化されないか、リークが参照自体に含まれている場合です。言い換えれば、私は、GlobalReferenceがJavaの空間で余分なリファレンスを持っているか、オブジェクトがGCされている可能性があるが、リークが参照オブジェクト自体

弱いグローバルな参照が存在するので、ドキュメントによってGC元のオブジェクトが死んでしまうので、私は前者だと思う傾向がありますが、私は安全な側にいるように頼むことにしました。

+0

あなたはJNI仕様のコンサルティングを検討しましたか? – EJP

+0

http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#global_localでは、実際に何が行われたか明確には説明していません。 – Panayotis

+0

グローバル参照は、紛失した場合にのみリークします。 –

答えて

2

GlobalReferenceはい、そのような場合は、オブジェクトが

をGC'edする停止する場合。 GCはJNIグローバル参照を認識しており、それらをGCルーツとみなします。

JNIグローバル参照はJVMTIにも公開されており、JProfilerなどのツールで参照できます。

関連する問題