Какой из этих двух кодов Java быстрее? - PullRequest
0 голосов
/ 11 мая 2018

Как теоретически, так и практически, какой код быстрее:

class ABC{
    File file;

    void method(){   
        file = new File();
    }
}

или

class ABC{

    void method(){
        File file = new File();
    }
}

, где класс ABC создается только один раз.Но method() для этого экземпляра вызывается несколько раз.Примечание: я ЗНАЮ, что скорость на самом деле не имеет значения в этом случае.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Наконец я получил направление.Не на stackoverflow, но на Quora.Проверьте ответ Кэмерон Перди здесь .. https://www.quora.com/How-much-time-does-it-take-to-access-an-object-and-variable-in-Java-And-whats-the-ratio-between-them

0 голосов
/ 11 мая 2018

Разница в производительности вряд ли будет иметь большое значение.

В первой версии будет действительная ссылка на объект File до следующего вызова method, но предыдущий объект будетвсе еще нужно собрать мусор после того, как его заменили.Во второй версии объект File теряется, когда method закончен, и его можно собирать мусором.

Таким образом, первая версия означает, что у вас всегда будет хотя бы один не подлежащий сбору объект File, остающийся в памяти до тех пор, пока существует экземпляр ABC.Это вряд ли будет большой проблемой, если только File не потребляет немалый объем памяти (он содержит только путь и имя файла. Буферизация содержимого файла - это работа BufferedReader), и вы продолжаетемножество ABC экземпляров вокруг.

Что вас должно беспокоить, так это ясность кода.Общее правило заключается в том, что каждая переменная должна иметь наименьшую возможную область видимости.Когда может быть локальной переменной, тогда должно быть локальной переменной.Причина в том, что чем меньше область действия, тем меньше кода может повлиять на его значение, что облегчает отладку приложения.Когда вы сталкиваетесь с ошибкой, из-за которой file неожиданно не имеет ожидаемого значения, вам нужно изучить только один метод, а не весь класс.

...