Предыдущая статьяЯ рассказал об идее именования функций и интерфейсов в коде.Сегодня, для некоторых мелких деталей в нашем ежедневном коде, я расскажу о местах, которые мы можем оптимизировать, и я надеюсь, что это будет полезно для всех.
Оптимизация цикла
-
Уточните концепцию, вызов метода, даже если в методе есть только один оператор, потребляет, включая создание кадра стека, защиту сцены при вызове метода и восстановление сцены при вызове метода. Так, например, следующая операция:
for (int i = 0; i < list.size(); i++)
{
...
}
Рекомендуется заменить на:
for (int i = 0, int length = list.size(); i < length; i++)
{
...
}
Кроме того, если в структуре цикла есть вычисление условий логического суждения, независимых от элементов цикла, например, если (A > B && B > C), рекомендуется заменить его на if(conditionD).
2. Вынести все вычисления, не связанные с переменными цикла, за пределы цикла, что не поясняется.
3. Не используйте try...catch... в цикле, это должен быть самый внешний слой. Основная причина в том, что если в цикле возникает исключение, try..catch напрямую выходит из цикла во внешнем слое, иначе цикл будет продолжаться, если во время выполнения возникнет исключение.
4. Не продолжайте создавать ссылки на объекты в цикле
Например:
for (int i = 1; i <= count; i++)
{
Object obj = new Object();
}
Такой подход приведет к тому, что в памяти будет существовать количество ссылок на объекты объекта count.
Object obj = null;
for (int i = 0; i <= count; i++)
{
obj = new Object();
}
Оптимизация логических суждений
1. Попробуйте использовать стратегию «ленивой загрузки», то есть создавайте ее тогда, когда она нужна
Например:
String str = "forest";
if (i == 1)
{
list.add(str);
}
Рекомендуется заменить на:
if (i == 1)
{
String str = "forest";
list.add(str);
}
2. Операторы switch отсортированы по частоте появления, а наиболее часто используемые помещаются вверху, чтобы уменьшить ошибочные суждения.
3. Оператор if ставит условие слабого вычисления впереди, чтобы избежать избыточного вычисления.
4. Когда строковые переменные и строковые константы равны, записывайте строковые константы впереди, что является относительно распространенным приемом. Например:
String str = "forest";
if (str.equals("forest"))
{
...
}
Предлагается изменить на:
String str = "forest";
if ("forest".equals(str))
{
...
}
Оптимизация выражений
Уменьшите вычислительную нагрузку, используйте операции сдвига для умножения и деления, используйте сдвиги вместо умножения и деления целых чисел, кратных 2,
Используйте побитовые операции вместо операций с остатком.
Например:
for (val = 0; val < 100000; val += 5)
{
a = val * 8;
b = val / 2;
}
Использование операции сдвига позволяет значительно повысить производительность, т. к. в нижней части компьютера операция бита наиболее удобна и быстра, поэтому рекомендуется модифицировать ее как:
for (val = 0; val < 100000; val += 5)
{
a = val << 3;
b = val >> 1;
}
2. Оптимизация булевой логики, это тоже деталь, на которую люди не обращают особого внимания.Например, преобразование !a && !b в !(a || b) сократит много вычислений программы.
небольшое резюме
На самом деле в коде есть еще много моментов, которые можно оптимизировать. Цель этих примеров — проиллюстрировать один момент. Если вы будете больше думать и уделять больше внимания деталям выполнения каждого оператора, вы можете получить много и улучшить.
Отсканируйте QR-код или вручную выполните поиск в общедоступной учетной записи WeChat [стек архитектуры]: ForestNotes
Добро пожаловать на перепечатку, принесите следующий двумерный код