Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Есть ли разница и какая? Java пример / 19 сообщений из 19, страница 1 из 1
11.11.2014, 18:01
    #38802559
j_mik0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли разница и какая? Java пример
Всем доброго времени суток.
Сейчас вытягиваю с базы записи которых может быть >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
11.11.2014, 18:09
    #38802574
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли разница и какая? Java пример
j_mik0,
Разницы нет, т.к. в обоих случаях место для p выделяется один раз в "таблице переменных" метода. Т.е. после компиляции байткод будет одинаковый.
...
Рейтинг: 0 / 0
11.11.2014, 18:10
    #38802577
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли разница и какая? Java пример
Однажды у Ходжи Насредина спросили:
-Скажите,а как правильно...Идти впереди носилок или сзади носилок.?
-Где идти не важно...главное не быть на носилках.
Ваш код ,мне напомнил эту притчу.
...
Рейтинг: 0 / 0
11.11.2014, 18:29
    #38802603
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли разница и какая? Java пример
j_mik0,

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

На этом спасибо.
...
Рейтинг: 0 / 0
11.11.2014, 19:03
    #38802653
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли разница и какая? Java пример
исходник
Код: 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
11.11.2014, 19:05
    #38802656
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли разница и какая? Java пример
j_mik0no56892,

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

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

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


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