Изменение теста ниже для использования ArrayList Я получаю следующее, когда использую большой размер молодого поколения.-XX:NewSize=1g
Это помогает, потому что GC - это большие накладные расходы, а большой размер Eden уменьшает количество GC.
ArrayList push&pop 10000000 repeated 10 times took 1183 ms.
Примечание: чтобы ArrayList был эффективным, вы хотите добавить его в конец (и удалитьс конца)
Вы можете попробовать TIntArrayList или сделать то же самое
TIntArrayList list = new TIntArrayList();
long start = System.nanoTime();
int values = 10 * 1000 * 1000;
int runs = 10;
for (int r = 0; r < runs; r++) {
for (int i = 0; i < values; i++) {
list.add(i);
}
for (int i = 0; i < values; i++) {
int last = list.remove(list.size() - 1); // get the last
}
}
long time = System.nanoTime() - start;
System.out.println("TIntArrayList push&pop " + values + " repeated "+runs+" times took " + time / 1000000 + " ms.");
print
TIntArrayList push&pop 10000000 repeated 10 times took 577 ms.
Самыми большими издержками, вероятно, будет распределение объектов.Чтобы ускорить это, я предлагаю вам взглянуть на способы минимизировать это.Кстати: вы должны проверить, сколько времени это займет с различными целыми числами.