
Зачем оптимизировать?
Любой программист может написать работающий код. При написании крупномасштабных корпоративных Java-приложений самая большая проблема заключается в том, что требуется слишком много ресурсов, и эти ресурсы (память, циклы ЦП, пропускная способность сети или их комбинация) могут быть ограничены. Оптимизация кода поможет сохранить работоспособность памяти, производительности и других ресурсов.
Современные компиляторы выполняют продвинутый уровень оптимизации. Но уровень оптимизации, который javacвыполняет при компиляции кода на данном этапе, минимален.
Пример 1: сумма = (2 * 50) соответствует сумме = 100.
Следующий мертвый код также будет устранен во время компиляции.
Пример 2:
if(false){ count = 10; }
Кроме того, компилятор Java Just-In-Time использует один параметр производительности, чтобы заставить компилятор встраивать определенные вызовы методов. См. приведенный ниже пример для встраивания метода.
Пример 3:
public int add(int a, int b) { return a + b; }
public void testAdd() {
int val = добавить(2, 5);
int val1 = добавить(7, 13);
// делаем что-то с val, val1
}
После компиляции метод встроен следующим образом:
общественный недействительным testAdd () {
int val = 2+5;
int val1 = 7+13;
}
Компилятор делает это, чтобы сэкономить накладные расходы на фактический вызов функции, который потребовал бы помещения каждого параметра в стек.
Как оптимизировать код?
- Объекты (или строки, HashMaps, …) дешевы
- Фреймворки написаны экспертами, поэтому они были оптимизированы
- JIT и GC все исправят
- Управление типами данных
- Убедитесь, что вы выбрали подходящий тип данных для подходящих операций. (т.е. не выбирайте тип int для возраста, вместо этого используйте byte/short )
Всегда заботьтесь о следующем,
- Накладные расходы от ваших типов данных
- Накладные расходы от выбора вашей коллекции, фиксированные или переменные
- Множество других способов разбить накладные расходы
- Накладные расходы на объект JVM, пустые слоты массива, неиспользуемые поля, повторяющиеся данные,…
- Управление временем существования объекта
Не делайте объекты сложными. сделать их простыми и не удлинять жизненный цикл объектов, что может привести к проблемам параллелизма, утечкам и дополнительным затратам памяти.Для примера: если в куче живет 80 миллионов объектов, если каждый объект содержит не менее четырех полей
80M x 32 байта = 2,5G