Kotlin 为什么从未调用过终结器?
Kotlin why is finalizaer never called?
我是 Kotlin 的新手,我不明白 finalize() 方法是如何工作的。我知道 Swift 并且有一个名为 deinit 的方法,它在对象被销毁时被调用。我如何检查一个对象是否已在 Kotlin 中被销毁。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
printTC()
}
fun printTC(){
var tc:TestClass? = TestClass()
println(tc?.i)
tc = null
}
}
class TestClass{
var i = 0
init {
test()
}
protected fun finalize(){
println("TestClass freed")
}
fun test(){
println("test")
}
}
当不再有对某个对象的引用时,不能保证垃圾收集立即 运行,这可能是您还没有看到 finalize
方法 运行 的原因。您可以 尝试 通过调用 System.gc()
将其强制为 运行,但最终由 GC 实现来选择何时 运行 终结器,所以你一般不应该依赖它们。
Android 垃圾收集的行为可能因多种原因而有所不同,但至少在简单的 JVM 命令行应用程序中,这会按您的预期工作:
fun main() {
var tc: TestClass? = TestClass() // test
tc = null
System.gc() // TestClass freed
}
我是 Kotlin 的新手,我不明白 finalize() 方法是如何工作的。我知道 Swift 并且有一个名为 deinit 的方法,它在对象被销毁时被调用。我如何检查一个对象是否已在 Kotlin 中被销毁。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
printTC()
}
fun printTC(){
var tc:TestClass? = TestClass()
println(tc?.i)
tc = null
}
}
class TestClass{
var i = 0
init {
test()
}
protected fun finalize(){
println("TestClass freed")
}
fun test(){
println("test")
}
}
当不再有对某个对象的引用时,不能保证垃圾收集立即 运行,这可能是您还没有看到 finalize
方法 运行 的原因。您可以 尝试 通过调用 System.gc()
将其强制为 运行,但最终由 GC 实现来选择何时 运行 终结器,所以你一般不应该依赖它们。
Android 垃圾收集的行为可能因多种原因而有所不同,但至少在简单的 JVM 命令行应用程序中,这会按您的预期工作:
fun main() {
var tc: TestClass? = TestClass() // test
tc = null
System.gc() // TestClass freed
}