Is there a way to implement the Cleaner with primitives other than boxing them in classes?

48 Views Asked by At

So, we have a kotlin wrapper around vulkan which relies on inline classes for vulkan identifiers (which are usually Longs)

As far as I got, Java (9+) Cleaner is supposed to work only with classes.

Here an example

I tried to modify that in order to run with plain primitives

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) {
        }

    }
}

But unfortunately without success.

So my question is if there is a way to have Cleaner working with primitives representing native off-heap resources without having to wrap them in classes

0

There are 0 best solutions below