Я основываю это на эксперименте, который я использовал, используя класс MemoryTestBench описанный здесь. Мой тест и вывод следующие:
package memory;
import java.util.ArrayList;
import java.util.List;
public class ArrayListExperiment {
public static void main(String[] args) {
ObjectFactory arrayList = new ObjectFactory() {
public Object makeObject() {
List<Long> temp = new ArrayList<Long>(1000);
for (long i=0; i<1000; i++)
temp.add(i);
return temp;
}
};
ObjectFactory primitiveArray = new ObjectFactory() {
public Object makeObject() {
long[] temp = new long[1000];
for (int i=0; i<1000; i++)
temp[i] = i;
return temp;
}
};
MemoryTestBench memoryTester = new MemoryTestBench();
memoryTester.showMemoryUsage(primitiveArray);
memoryTester.showMemoryUsage(arrayList);
}
}
и вывод:
memory.ArrayListExperiment$2 produced [J which took 8016 bytes
memory.ArrayListExperiment$1 produced java.util.ArrayList which took 24968 bytes
Мой вопрос: как я могу извлечь выгоду из списка OO и все еще сохранить небольшой объем памяти примитивного массива? Я думаю, что guava может предоставить ответ, но, просматривая API, мне не кажется, какой класс использовать вместо ArrayList.
Спасибо за любые предложения.