首页 > 解决方案 > 除了在类中装箱之外,有没有办法用原语实现清洁器?

问题描述

所以,我们有一个围绕vulkan的 kotlin 包装器,它依赖于 vulkan 标识符(通常是Longs)的内联类

据我所知,Java(9+)Cleaner应该只适用于类。

这里有一个例子

我试图修改它以使用普通原语运行

fun main() {
    val cleaner = Cleaner.create()
    for (i in 0..9) {
        val id = Integer.toString(i)
        val vkObject = 0L + i
        cleaner.register(vkObject, CleanerRunnable(id))
    }

    //myObjects are not reachable anymore
    //do some other memory intensive work
    for (i in 1..10000) {
        val a = IntArray(10000)
        try {
            Thread.sleep(1)
        } catch (e: InterruptedException) {
        }

    }
}

但遗憾的是没有成功。

所以我的问题是,是否有一种方法可以Cleaner使用表示本机堆外资源的原语,而不必将它们包装在类中

标签: javakotlinkotlin-inline-class

解决方案


推荐阅读