Есть ли способ реализовать очиститель с примитивами, кроме как упаковывать их в классы?

#java #kotlin #kotlin-inline-class

#ява #котлин #kotlin-встроенный класс

Вопрос:

Итак, у нас есть оболочка kotlin вокруг vulkan, которая полагается на встроенные классы для идентификаторов vulkan (которые обычно являются Long s)

Насколько я понял, 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 работать с примитивами, представляющими собственные ресурсы вне кучи, без необходимости оборачивать их в классы

Комментарии:

1. Может быть, использовать тип объекта, например, Long и полагаться на автоматическую упаковку?

2. Что вы подразумеваете под «полагаться на автоматическую упаковку»?

3. Cleaner и off-heap являются взаимоисключающими. Cleaner и примитивы являются взаимоисключающими. Какова ваша реальная цель?

4. Реплицировать Unique дескриптор vulkan hpp для автоматического управления ресурсами