Альтернативы ArrayList для примитивных типов в Java для численных вычисленийJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Альтернативы ArrayList для примитивных типов в Java для численных вычислений

Сообщение Anonymous »

Мой вопрос: как лучше всего избежать упомянутых накладных расходов? Я не понимаю, почему мой вопрос был закрыт по причине: «Этот вопрос должен быть более сфокусированным».
Сейчас я работаю над численными вычислениями в конкретном исследовании. домен и унаследовали пакет Java, давно реализованный моей командой. Моя задача сейчас — оптимизировать его работу. В пакете широко используется ArrayList. Насколько мне известно, Java, по крайней мере до версии 9, которую я использую, не поддерживает ArrayList примитивных типов из-за стирания типов в дженериках Java.
Там Есть несколько проблем:
  • Накладные расходы на хранение: Double — это класс-оболочка для double. Поскольку Double является объектом, он включает заголовок объекта, который занимает 8 байт. Таким образом, каждый объект Double занимает 16 байт памяти.
  • Несмежная память: ArrayList внутренне использует массив для хранения Объекты Double, т. е. данные Double[]. Этот массив содержит ссылки на экземпляры Double. Эти экземпляры не хранятся в куче подряд. Например, если Double[] data = {1.0, 2.0, ссылки в данных являются смежными, но фактические объекты Double, на которые указывают эти ссылки, — нет. Это приводит к плохой локализации и частым промахам в кэше из-за необходимости разыменования этих указателей.
  • Распаковка и автоупаковка: возникают дополнительные издержки из-за распаковка и автоупаковка при выполнении сравнений и вычислений с помощью Double.
Мои вопросы:
Каковы наилучшие способы избежать упомянутых накладных расходов? Я приветствую любые ответы на приведенные ниже вопросы.
  • Есть ли в последних версиях Java какие-либо новые функции, позволяющие использовать ArrayList с примитивными типами ?
  • Есть ли какие-либо экспериментальные функции, платформы или библиотеки, поддерживающие это?
  • Если нет, возможно ли создать личный DoubleArrayList, заменив все объекты в исходном коде ArrayList на примитивный двойной? Каковы потенциальные подводные камни такого подхода?
PS:
  • У нас очень плотный график, и у нас нет времени переписывать весь пакет на C++, где доступен вектор.
  • В нашем случае размер контейнера будет меняться во время вычислений, и мы не знаем размер заранее. Поэтому мы должны использовать массив изменяемого размера (например, ArrayList) вместо double[].


Подробнее здесь: https://stackoverflow.com/questions/788 ... rical-comp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Альтернативы ArrayList для примитивных типов в Java для численных вычислений
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Альтернативы ArrayList для примитивных типов в Java для численных вычислений
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Альтернативы ArrayList для примитивных типов в Java для численных вычислений
    Anonymous » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Запрос о неявном приведении типов в Java для примитивных типов данных
    Anonymous » » в форуме JAVA
    0 Ответы
    80 Просмотры
    Последнее сообщение Anonymous
  • Карта альтернативы для примитивных значений
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»