Chvalov
@Chvalov

Как понять — оптимизировать код?

Парни что то я совсем запутался, объясните как понимать оптимизирован код.
Если можно дайте примеры кода и того же кода только оптимизированного.

И еще вопрос, если есть переменная в которую число больше чем 100 не записывается (допустим строка загрузки там от 0 до 100) и если сменить тип int на byte это уже считается оптимизация (Вроде как памяти будет выделено на много меньше) ?

И еще оптимизация, в плане - меньше строк кода но более тяжелый для выполнения или больше кода но легче для машины ?

И чуток не по теме: В рефакторинг кода входит и оптимизация кода или только переделывания кода для более понятного визуального восприятия ?
  • Вопрос задан
  • 1206 просмотров
Решения вопроса 1
  • @Tiberal
    Самый просто пример оптимизации

    String output = "Some text"; 
        int count = 100; 
        for(int i =0; i<count; i++) { 
        output += i; 
        } 
        return output;


    против

    StringBuffer output = new StringBuffer(110); 
        output.append("Some text"); 
        for(int i =0; i<count; i++) { 
            output.append(i); 
        } 
        return output.toString();


    Код делает одно и тоже, но в первом случае при вызове output += i будет каждый раз создаваться новая строка, во втором мы используем один объект. Таким образом в первом случае в памяти будет болтаться 101 строка во втором случае один объект из которого мы можем вытащить строку.
    Ответ написан
Пригласить эксперта
Ответы на вопрос 4
  • angrySCV
    @angrySCV
    machine learning, programming, startuping
    byte в java также компилируется в int, тоесть изменение типа данных абсолютно ничего не меняет.
    да и вобще оптимизацию обычно делают в подходах, в концепциях, в классах алгоритмов, а смена типа данных это не оптимизация - это ананизм.
    Ответ написан
  • angry_cellophane
    @angry_cellophane
    Обычно, под оптимизацией понимают:
    1. Ускорение выполнения программы.
    2. Уменьшение используемой памяти.

    Пример: для работы с xml в джава модно использовать JAXP и SAX парсеры. SAX - однопроходный парсер, который не грузит xml файлы целиком в память, а предлагает использовать что-то вроде колбэков по определенным событиям (события: начало тэга, конец тэга, и т.д.). Таким образом он экономит память, но если нужно выполнить работу с DOM структурой xml файла, то sax парсеру придется проходить по документу несколько раз, что увеличивает время работы. По этой причине есть JAXP парсер, который сначала парсит xml документ целиком, строит для него DOM, но требует гораздо больше памяти, зато время работы существенно уменьшается. Как видно, оптимизация использования памяти/времени работы взаимосвязаны, потому перед оптимизацией стоит как можно больше узнать про нефункциональные требования к программе (Non functional requirements - NFRs), чтобы оптимизируя одно, не сломать другое.

    Рефакторинг не подразумевает оптимизацию. Рефакторинг - , в первую очередь, это улучшение читабельности, поддерживаемости и расширяемости кода. Сферический пример в вакууме: вначале проекта решили напрямую инстанцировать объекты класса Bird, затем пришло осознание, что лучше использовать фабричный метод, т.к. для кое-где для тестов нужно использовать Dummy объекты. Затем решили перейти к фабрикам, потому что теперь наша система должна различать Duck и Goose. С нефункциональными требованиями эти изменения не связаны.
    Ответ написан
  • A1ejandro
    @A1ejandro
    ИТ-специалист
    Одну и ту же задачу дали профи и школьнику. Каждый написал решение (свой код). Решение школьника состоит из 1000 строк кода, программа работает 1 час и дает правильный результат.
    Решение профи состоит из 250 строк кода, программа работает 1 минуту и тоже дает правильный результат. Какой из кодов оптимальный (оптимизированный), а какой нет?
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Тиллипад Санкт-Петербург
До 110 000 руб.
Транссеть Нижний Новгород
от 50 000 до 120 000 руб.