Я попытался оптимизировать использование оперативной памяти в игре для Android, изменив примитивы int на shorts. Прежде чем я сделал это, меня интересовала производительность примитивных типов в Java.
Поэтому я создал этот небольшой тестовый бенчмарк, используя библиотеку суппорта.
public class BenchmarkTypes extends Benchmark {
@Param("10") private long testLong;
@Param("10") private int testInt;
@Param("10") private short testShort;
@Param("5000") private long resultLong = 5000;
@Param("5000") private int resultInt = 5000;
@Param("5000") private short resultShort = 5000;
@Override
protected void setUp() throws Exception {
Random rand = new Random();
testShort = (short) rand.nextInt(1000);
testInt = (int) testShort;
testLong = (long) testShort;
}
public long timeLong(int reps){
for(int i = 0; i < reps; i++){
resultLong += testLong;
resultLong -= testLong;
}
return resultLong;
}
public int timeInt(int reps){
for(int i = 0; i < reps; i++){
resultInt += testInt;
resultInt -= testInt;
}
return resultInt;
}
public short timeShort(int reps){
for(int i = 0; i < reps; i++){
resultShort += testShort;
resultShort -= testShort;
}
return resultShort;
}
}
Результаты теста меня удивили.
Проверить обстоятельства
Бенчмарк запускаем под библиотекой Caliper.
Результаты тестирования
https://microbenchmarks.appspot.com/runs/0c9bd212-feeb-4f8f-896c-e027b85dfe3b< /а>
Целое 2,365 нс
Длинный 2,436 нс
Короткий 8,156 нс
Заключение теста?
Короткий примитивный тип значительно медленнее (в 3-4 раза), чем длинный и примитивный тип int?
Вопрос
Почему примитив short значительно медленнее, чем int или long? Я ожидаю, что примитивный тип int будет самым быстрым на 32-битной виртуальной машине, а длинный и короткий будут равны по времени или короткий будет еще быстрее.
Это также относится к телефонам Android? Зная, что телефоны Android обычно работают в 32-битной среде, и сейчас все больше и больше телефонов начинают поставляться с 64-битными процессорами.
+=
отдельно или в сочетании с^=
). @StephenC Текущая причина закрытия больше не является правильной, поэтому я бы предложил повторно открыть (хотя она может быть закрыта как дубликат вопроса, на который вы ссылаетесь). - person maaartinus   schedule 19.06.2014short
уменьшит объем используемой памяти. - person Boris the Spider   schedule 19.06.2014