powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Есть ли разница и какая? Java пример
19 сообщений из 19, страница 1 из 1
Есть ли разница и какая? Java пример
    #38802559
j_mik0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.
Сейчас вытягиваю с базы записи которых может быть >100k и задумался... Ведь разница в ниже приведенных примерах есть и значительная. К примеру, когда куча записей вытягивается с базы в коллекцию, где поля объекта должны содержать значения колон из таблицы, то память рассходуется на ура.

Так вот...Какое различие между двумя примерами?
Мой вариант:
В первом примере создается ссылка "p" и ей каждую итерацию присваивается объект Integer, тем самым перезаписывая ссылочные данные, что как результат - экономия памяти и быстродействие. А второй пример наооборот - кушает память и должен выполняться дольше...

1)
Integer[] arr = new Integer[100000];
Integer p;
for (int i = 0; i < 100000; i++){
p = new Integer(i);
arr[i] = p;
}

2)
Integer[] arr = new Integer[100000];
for (int i = 0; i < 100000; i++){
Integer p = new Integer(i);
arr[i] = p;
}

P.S.
Как можно убедиться в правильности своей догадки я не знаю. Поэтому решил спросить у Вас. Хочется писать правильный и эффективный код.
P.P.S.
Если, что то не правильно расписал. Ткните. :)
Спасибо зараннее!
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802574
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j_mik0,
Разницы нет, т.к. в обоих случаях место для p выделяется один раз в "таблице переменных" метода. Т.е. после компиляции байткод будет одинаковый.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802577
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однажды у Ходжи Насредина спросили:
-Скажите,а как правильно...Идти впереди носилок или сзади носилок.?
-Где идти не важно...главное не быть на носилках.
Ваш код ,мне напомнил эту притчу.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802603
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j_mik0,

Это традиционный trade-in в разработке между памятью и процессором. Если тебе не хватат ресурса процессора, то нужно больше данных развернуть в памяти чтобы минимизировать работу процессора. И наоборот, если решение задачи требует меньше памяти, то за это можно заплатить ценой дополнительной работы процессора.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802605
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczj_mik0,

Это традиционный trade-in в разработке между памятью и процессором. Если тебе не хватат ресурса процессора, то нужно больше данных развернуть в памяти чтобы минимизировать работу процессора. И наоборот, если решение задачи требует меньше памяти, то за это можно заплатить ценой дополнительной работы процессора.

Вышеприведенный код перпендикулярен проблеме RAM/CPU. Потребление памяти эквивалентное.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802623
j_mik0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892,

А где можно об этом почитать?
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802632
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j_mik0no56892,

А где можно об этом почитать?
Код должен в первую очередь - выполнять поставленую задачу.
Во вторую - быть простым и понятным.
И уже в третью эффективным.
Вы не с той стороны зашли.

А по поводу того что как устроено. Сложно сказать. Для начала нужно научиться различать переменные и объекты. А потом уже читать про размещение объектов в куче и переменных на стэке.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802635
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трудно себе представить задачу где нужно выделять 100 тысяч обёрток для целых чисел.
Не знаю зачем автору это нужно. Кстати очень часто новички страдают тем что пытаются
копи-пастить базу данных на клиента целиком. Концепция работы с курсорами им
чем-то не нравится. Видимо здесь также есть краеугольный камень нелюбви к SQL
и ORM-офилия.

Ну в данном конкретном кейсе если на уровне постановки нет NULL объектов
то можно было бы написать так.

Код: java
1.
int arr = new int[100000];


И экономно и уже инициализировано :)

Для NULL объектов удачно идёт отрицательный диапазон (если это возможно на уровне ТЗ)
или "магическое число" типа Integer.MIN_VALUE.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802639
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..ну и конешно же.
Код: java
1.
int[] arr=
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802641
j_mik0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Хорошо. Понял. :)
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802651
j_mik0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonТрудно себе представить задачу где нужно выделять 100 тысяч обёрток для целых чисел.

Это как пример.
maytonНе знаю зачем автору это нужно. Кстати очень часто новички страдают тем что пытаются
копи-пастить базу данных на клиента целиком. Концепция работы с курсорами им
чем-то не нравится. Видимо здесь также есть краеугольный камень нелюбви к SQL
и ORM-офилия.

это как раз не про меня =) Просто был интерес, как бы выглядело, если достать все записи из базы, которые нужно отоброзить на странице по 50 строчек (к примеру) и хранить их в яве, а не делать каждый раз запрос в базу от зависимости страницы.
maytonНу в данном конкретном кейсе если на уровне постановки нет NULL объектов
то можно было бы написать так.

Код: java
1.
int arr = new int[100000];


И экономно и уже инициализировано :)

Для NULL объектов удачно идёт отрицательный диапазон (если это возможно на уровне ТЗ)
или "магическое число" типа Integer.MIN_VALUE.

На этом спасибо.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802653
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
исходник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
package test;

class C
{
  final static int COUNTER = 100000;
}

class Test
{
  void InsideLoop()
  {
    Integer[] arr = new Integer[C.COUNTER];
    Integer p;
    for (int i = 0; i < C.COUNTER; i++) {
      p = new Integer(i);
      arr[i] = p;
    }
  }
  
  void OutsideLoop()
  {
    Integer[] arr = new Integer[C.COUNTER];
    for (int i = 0; i < C.COUNTER; i++) {
      Integer p = new Integer(i);
      arr[i] = p;
    }
  }
  
  void OnlyLoop()
  {
    Integer[] arr = new Integer[C.COUNTER];
    for (int i = 0; i < C.COUNTER; i++) {
      arr[i] = new Integer(i);
    }
  }
}


Код: plaintext
1.
javac -version -g:none -d bin -cp bin src/Test.java
javac 1.7.0_71
jd-gui
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
package test;

class Test
{
  void InsideLoop()
  {
    Integer[] arrayOfInteger = new Integer[100000];
    for (int i = 0; i < 100000; i++)
    {
      Integer localInteger = new Integer(i);
      arrayOfInteger[i] = localInteger;
    }
  }
  
  void OutsideLoop()
  {
    Integer[] arrayOfInteger = new Integer[100000];
    for (int i = 0; i < 100000; i++)
    {
      Integer localInteger = new Integer(i);
      arrayOfInteger[i] = localInteger;
    }
  }
  
  void OnlyLoop()
  {
    Integer[] arrayOfInteger = new Integer[100000];
    for (int i = 0; i < 100000; i++) {
      arrayOfInteger[i] = new Integer(i);
    }
  }
}

Оба варианта одинаковы и чуть уступают третьему.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802656
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j_mik0no56892,

А где можно об этом почитать?
О! Рекомендую почитать про язык Ассэмблер. Ну, либо непосредственно про байт-код и его команды.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802661
j_mik0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,
Ого, надо будет побаловаться с таким подходом. Но как вы узнали, что быстрее? Могу предположить, что из-за параметров компиляции...
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802671
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У разных методов одного класса не может быть разных параметров компиляции.
Но в третий вариант тупо меньше на одно ненужное присваивание.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802676
j_mik0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczО! Рекомендую почитать про язык Ассэмблер. Ну, либо непосредственно про байт-код и его команды.
Да. Ассемблером баловался. И вроде бы разобравши был, но сейчас всё забыл... Понимал... Пока было нужно ))
BlazkowiczКод должен в первую очередь - выполнять поставленую задачу.
Во вторую - быть простым и понятным.
И уже в третью эффективным.

А на этом Вам спасибо, а то совсем забыл и в замарочки кидаюсь ))
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38802682
j_mik0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovУ разных методов одного класса не может быть разных параметров компиляции.
Но в третий вариант тупо меньше на одно ненужное присваивание.
Понятн.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38804116
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ДЕЙСТВИТЕЛЬНО есть пламенное желание просветиться:
https://docs.oracle.com/javase/specs/jvms/se8/html/

Чтиво полезное. Иногда.
...
Рейтинг: 0 / 0
Есть ли разница и какая? Java пример
    #38804160
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ключевые слова - heap, stack, pointer. Вот тут есть объяснения
http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Есть ли разница и какая? Java пример
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]