Finalization and dead references: another proposal
peter.levart at gmail.com
Thu Dec 7 18:46:47 UTC 2017
On 12/07/2017 07:12 PM, Remi Forax wrote:
>>> So no magic here. Just API.
>> This is an API version of Hans’s #3 approach. As he said, there’s
>> performance overhead and nothing guarantees that the referent is kept alive
>> - that’s an implementation artifact.
> it's not even true, the implementation do not even guarantee that the referent field will be kept on stack,
> a value type can disappear completely if its field are not used,
> so without a reachabilityFence somewhere, it will not work.
What do you mean by saying "the implementation do not even guarantee
that the referent field will be kept on stack".
If a referent is passed through a reference typed parameter to the JNI
method (there's no other way actually), then such referent must be kept
alive for the entire time the native method executes, because native
method may call methods or access fields on such referent. Because
there's no cross-native-baundary optimization going on currently, JNI
must guarantee that. If/when there will be cross-native-baundary
optimization, I suppose native side would have to have an equivalent to
reachabilityFence too ...
More information about the core-libs-dev