2012-06-24 4 views
2

Итак, у меня есть большой список целых чисел, с которыми я должен работать (порядка 70 Мб). Как часть процесса их чтения, мне нужно временно их хранить. Я могу либо распространять их по нескольким IntBuffers, либо выделять пару больших массивов.Как IntBuffer сравнивается с массивом с точки зрения использования памяти?

Я не смог найти документацию о том, как IntBuffer сравнивается с массивом с точки зрения использования памяти (со всеми метаданными, добавляемыми java). Кто-нибудь знает что-нибудь об этом?

+0

Зачем вам они нужны, и есть ли дополнительные знания об этих ints? Являются ли они набором или есть повторение? Служит ли роль в роли или нет? –

+0

@userunknown Если быть точным, это данные геометрии из OBJ-файла. При анализе файла вершины должны быть связаны с индексами, чтобы определить, к какому треугольнику они принадлежат в трехмерной модели. Я все еще пытаюсь найти хороший алгоритм для этого, но так как моя попытка с ArrayLists потерпела неудачу (более 500 МБ в использовании памяти), мне было интересно узнать больше об эффективности хранения данных в памяти. – Bartvbl

+0

Что IntBuffer дает вам, что массивы нет? – EJP

ответ

1

Существует очень небольшая разница между int[] и кучей IntBuffer или прямым IntBuffer с точки зрения использования памяти esp, если массивы большие. (Есть небольшая над головой)

С точки зрения производительности int[] является самым быстрым и прямым IntBuffer с собственным байтовым заказом является вторым самым быстрым. Преимущество IntBuffer заключается в том, что он имеет кучу, и вы можете иметь гораздо большие размеры, например. 70 ГБ без увеличения размера кучи или полного времени GC.

Для массива 70 МБ он достаточно мал, чтобы простейшее решение int[], вероятно, было лучшим. (Он также будет самым простым для записи и наиболее эффективным для запуска)

+0

Итак, оба из них хранят метаданные для каждого элемента, или это небольшое количество метаданных для всего объекта, после чего он просто хранит данные? – Bartvbl

+1

Оба хранили некоторые метаданные на объект, а не на элемент. В случае int [] его 8-12 байтов. Для IntBuffer - около 40 байт. –

2

Относительно 70 Мбайт int, метаданные, добавленные IntBuffer, ничего. Но профилировщик даст вам более полный ответ.

Смежные вопросы