Можем ли мы реализовать список стилей C++ в Java?

В Java arrayList "хранит" ссылки на объекты, а не на фактические данные объекта.

Мне было интересно, можем ли мы реализовать arrayList в Java, который может содержать данные объекта непосредственно вместо ссылок. Можно ли использовать Java Unsafe Class для этой реализации? Если да, какова будет производительность этого списка по сравнению с существующим Java arrayList?

1 ответ

Решение

Вкратце нет.

Java работает только со ссылками на объекты. То, что вы описываете, основано на низкоуровневом контроле за распределением / использованием памяти, позволяющим вам выделить блок памяти для 'n' записей. Java просто так не работает - вы никогда не управляете памятью, а JVM может перемещать объекты в памяти. Вы имеете дело только со ссылками.

Также обратите внимание, что объекты, содержащие ссылки, будут ссылаться на другие отдельные блоки памяти, и поэтому концепция объекта, содержащегося в одном смежном блоке памяти, здесь на самом деле не существует.

Если вы действительно хотите, чтобы байтовый массив поддерживался памятью, DirectByteBuffer может быть полезен. Это java.nio класс построен с использованием sun.misc.Unsafe учебный класс. Возможно, вы могли бы сериализовать / десериализовать объекты к нему (тщательно рассчитав размер для правильного определения индексации). Но я подозреваю, что стоимость сериализации затопит любую другую экономию.

Другие вопросы по тегам