首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果调用JNI DeleteGlobalRef(),相应的java对象是否会被垃圾回收?

调用JNI的DeleteGlobalRef()函数会删除全局引用,但不会直接触发Java对象的垃圾回收。垃圾回收是由Java虚拟机自动管理的过程,它会根据对象的引用计数和可达性分析等算法来确定对象是否可以被回收。

当调用DeleteGlobalRef()函数删除全局引用时,只是将JNI中的引用计数减一,如果该对象的引用计数变为零,说明没有其他JNI对象引用该Java对象,此时Java对象变为不可达状态。当Java虚拟机执行垃圾回收时,会检测到该对象不可达,并将其标记为可回收对象。最终,在合适的时机,Java虚拟机会回收该对象的内存空间。

需要注意的是,垃圾回收的具体时机是由Java虚拟机决定的,不同的虚拟机实现可能会有不同的策略和算法。因此,调用DeleteGlobalRef()函数并不直接触发垃圾回收,而是间接地影响了Java对象的可达性,从而可能导致垃圾回收的发生。

推荐的腾讯云相关产品:腾讯云函数(云原生Serverless计算服务),腾讯云数据库(云原生数据库服务),腾讯云CDN(内容分发网络服务),腾讯云安全产品(如DDoS防护、Web应用防火墙等)。

腾讯云函数:https://cloud.tencent.com/product/scf

腾讯云数据库:https://cloud.tencent.com/product/cdb

腾讯云CDN:https://cloud.tencent.com/product/cdn

腾讯云安全产品:https://cloud.tencent.com/solution/security

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • JNI之路径初探---6

    本篇文章讲解JNI下属性的内存释放问题,众所周知,JAVA有四大引用,1,强引用2,弱引用3,软引用4,虚引用。JNI有三大引用,1,普通全局引用2,弱全局引用3,局部引用。 1,Native方法执行完最后一行代码完毕后,方法内的所有局部对象全部自动释放内存。 2,弱、普通全局引用是跨线程、方法的,不同的是全局引用必须手动调用(env)->DeleteGlobalRef(env, 引用);才能释放内存,而弱全局适用于包装那些使用不频繁的属性,它是不稳定的,因为它不会阻止垃圾回收机制释放其内存,只要内存不够,弱引用就可能被释放。 3,引用的比较用(env)->IsSameObject(env, obj_1, obj_2),特殊的一点如果比较的是NULL,NULL是JVM下的对象,如果你比对的对象是null,尽管"相同",但是会不同。

    02
    领券