Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как оптимальнее - переменная внутри цикла или вне? 
V
    Опции темы
dorogoyIV
Дата 24.8.2008, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(ivg @  23.8.2008,  22:11 Найти цитируемый пост)
 ,а мы напишем такой:КодincludeSyntax('java');    public void call(String[] a) {        StringBuilder sb = new StringBuilder();        for (int i = 0; i < 10; i++) {            sb.append(a[i]);        }        String s = sb.toString();    }highlightSyntax('java_kMTUxY','java'); Легко догадаться, что наш вариант будет оптимальнее по производительности.  


ну так переменная вне цикла  smile 
PM MAIL   Вверх
dorogoyIV
Дата 24.8.2008, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(Entry_N3 @  23.8.2008,  20:45 Найти цитируемый пост)
ну так как лучше с точки зрения памяти - вне цикла или внутри?

если инициализируешь какой то объект, то внутри (зачем лишние объекты)
Код

ArrayList <String> arr = new ArrayList();
for(int i = 0; i < 10; i++)
 // здесь можно написать: String s = i + ""; arr.add(s);
  arr.add(i + "");


в работе программы все равно потребуется какое то возвращаемое значение
Код

String s = "";
for(int i = 0; i < 10; i++)
 if(i == 5)
 {
   s = i + "";
   break;
 }

PM MAIL   Вверх
cube
Дата 1.9.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 2
Всего: 3



Что вы имеете ввиду под словом "оптимальнее", производительность? Или что?
Если производительность, то объявляйте переменную вне цикла, проведите тест и ты убедитесь, что работаьт так будет быстрее, я еще не читал ссылку которую вы скинули, но по старой памяти знаю, что в ява машине память для переменной каждый раз будет выделяться заново при каждой итерации! Выделение новой памяти задача более ресурсоемкая, чем перезапись значения в уже однажды выделенной памяти.

Если же верить тому, что говорите вы, тогда как объяснить смысл переменных? Вы хотите сказать, что каждый раз при новой итерации выделение новой памяти происходить не будет и тогда ссылка будет на один и тот же объект?! (когда переменная используется внутри цикла)
PM MAIL   Вверх
ivg
Дата 1.9.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Цитата(cube @  1.9.2008,  15:39 Найти цитируемый пост)
Если производительность, то объявляйте переменную вне цикла, проведите тест и ты убедитесь, что работаьт так будет быстрее, я еще не читал ссылку которую вы скинули, но по старой памяти знаю, что в ява машине память для переменной каждый раз будет выделяться заново при каждой итерации! Выделение новой памяти задача более ресурсоемкая, чем перезапись значения в уже однажды выделенной памяти.

Вы ссылку на объект с самим объектом не путаете? Ясно понимаете чем они отличаются?
Цитата(cube @  1.9.2008,  15:39 Найти цитируемый пост)
Если же верить тому, что говорите вы, тогда как объяснить смысл переменных? Вы хотите сказать, что каждый раз при новой итерации выделение новой памяти происходить не будет и тогда ссылка будет на один и тот же объект?! (когда переменная используется внутри цикла) 

Локальная переменная - суть место для её значения во фрейме метода. Локальная объектная переменная - суть место для значения ссылки на объект во фрейме метода. Если в это место будет записано новое значение ссылки, объектная локальная переменная станет ссылаться на другой объект.
PM MAIL   Вверх
cube
Дата 1.9.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 2
Всего: 3



Цитата(ivg @ 1.9.2008,  13:24)
Цитата(cube @  1.9.2008,  15:39 Найти цитируемый пост)
Если же верить тому, что говорите вы, тогда как объяснить смысл переменных? Вы хотите сказать, что каждый раз при новой итерации выделение новой памяти происходить не будет и тогда ссылка будет на один и тот же объект?! (когда переменная используется внутри цикла) 

Локальная переменная - суть место для её значения во фрейме метода. Локальная объектная переменная - суть место для значения ссылки на объект во фрейме метода. Если в это место будет записано новое значение ссылки, объектная локальная переменная станет ссылаться на другой объект.

Я ничего не путаю) Мне это интересно
На какой объект ссылаться? Т.е. в данном примере освобождение и выделение памяти при каждой итерации цикла происходить не будет? 
Код

while (true){String str = new...} // = "a"


Это сообщение отредактировал(а) cube - 1.9.2008, 14:08
PM MAIL   Вверх
ivg
Дата 1.9.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Аааа, вот вы о чём....
Посмотрите внимательно первый пост и название темы, там нет никакой речи о new..... Не думаете же вы, что объектная локальная переменная, может быть получена только с помощью new....?
PM MAIL   Вверх
cube
Дата 1.9.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 2
Всего: 3



Цитата(ivg @ 1.9.2008,  14:15)
Аааа, вот вы о чём....
Посмотрите внимательно первый пост и название темы, там нет никакой речи о new..... Не думаете же вы, что объектная локальная переменная, может быть получена только с помощью new....?

извините, я просто неправ, там везде были ссылки
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.