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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JVM оптимизация циклов по массиву, есть ли какая-нибудь оптимизация 
:(
    Опции темы
chaos
Дата 21.3.2009, 18:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

Репутация: 1
Всего: 44



День добрый! те вечер smile
Вот потихоньку изучаю Java и вот возник вопрос: отпимизирует(отключает проверку границ) ли JVM циклы работающие с массивами. я прочитал что в отличии от С++ (тут нет никаких проверок)
Код

type& operator [](size_t index)
 

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

Код

final int ARRAY_SIZE = MyObjectArray.length;
for (int i = 0; i < ARRAY_SIZE; i++) {
...
}


Код

for (int i = 0; i < MyObjectArray.length; i++) {
...
}


вроде как во 2ом примере можно проверку границ отключить ибо бессмысленно проверять, тк мы "никада" не выйдем, если конечно не сам дурак smile


Заранее благодарен!

ЗЫ тут глянул в электронную версию книги Эклея 4ое издание(я учусь по 3ум - тк бумажный вариант), увидел что появился вариант обхода массивов for( : ),но про это пока ничего не знаю

ЗЫЫ не пинайте если тема подымалаь, чот не нашел smile

Добавлено @ 18:34
ЗЫЫЫ а есть ли литература в которой описываются тонкости различные по яве? те всякого рода оптимизация, штучки дрючки? smile

Это сообщение отредактировал(а) chaos - 21.3.2009, 21:17
PM WWW   Вверх
SoulKeeper
Дата 22.3.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



Условие i < MyObjectArray.length проверяется при каждой итерации.
Для массивов єто не существенно, но если бы там был какой-то метод который бы тянул данные с БД (к примеру), то это заметно бы било по производительности.

В идеале:

Код

for(int i = 0, n = something.getSize(); i < n; i++)

PM MAIL   Вверх
chaos
Дата 22.3.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

Репутация: 1
Всего: 44



Цитата(SoulKeeper @ 22.3.2009,  11:52)
Условие i < MyObjectArray.length проверяется при каждой итерации.
Для массивов єто не существенно, но если бы там был какой-то метод который бы тянул данные с БД (к примеру), то это заметно бы било по производительности.

В идеале:

Код

for(int i = 0, n = something.getSize(); i < n; i++)

ага, понятно вроде стало.
накидал такой пример для проверки:
Код

class MyArray {
    private int _size = 0;
    
    public MyArray(int size) {
        _size = size;
    }
    
    public int getSize() {
        System.out.println("invoke getSize");
        return _size;
    }
}

public class Test {
    public static void main(String[] args) {
        MyArray array = new MyArray(5);
        for (int i = 0; i < array.getSize(); i++) {
            System.out.println(i);
        }
    }
}


результат:
Код

invoke getSize
0
invoke getSize
1
invoke getSize
2
invoke getSize
3
invoke getSize
4
invoke getSize


тогда конечно логичней(если размер объекта не изменяется каким-то образом) вынести getSize подобный метод за пределы цикла что бы вызвать его один раз.
Но вот касательно контейнеров(те до контейнеров я еще не дошел, касательно массивов) length как я понимаю открытое поле класса? не знаю есть ли в яве понятие свойства как например в Python'e





Это сообщение отредактировал(а) chaos - 22.3.2009, 17:43
PM WWW   Вверх
Vitaly333
Дата 22.3.2009, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А можно ли как - нибудь включить поддержку SSE для циклов в Java или в JVM это уже есть?
PM MAIL   Вверх
Kangaroo
Дата 23.3.2009, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Цитата(chaos @  21.3.2009,  18:33 Найти цитируемый пост)
а есть ли литература в которой описываются тонкости различные по яве? те всякого рода оптимизация, штучки дрючки?

Effective Java, Bloch'a ?


Цитата(chaos @  22.3.2009,  17:42 Найти цитируемый пост)
length как я понимаю открытое поле класса?

Да


Цитата(chaos @  22.3.2009,  17:42 Найти цитируемый пост)
не знаю есть ли в яве понятие свойства как например в Python'e

Нет такого.

Добавлено через 1 минуту и 53 секунды
Цитата(Vitaly333 @  22.3.2009,  21:07 Найти цитируемый пост)
SSE 

?


--------------------
Lost....
PM MAIL MSN   Вверх
chaos
Дата 23.3.2009, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

Репутация: 1
Всего: 44



Цитата(Kangaroo @ 22.3.2009,  21:58)
Effective Java, Bloch'a ?

угу, ченить в этом роде smile
Спасибо!

ЗЫ все больше и больше мне нравится ява smile
PM WWW   Вверх
Shaggie
Дата 23.3.2009, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 72



Цитата(Vitaly333 @  22.3.2009,  21:07 Найти цитируемый пост)
А можно ли как - нибудь включить поддержку SSE для циклов в Java

Вручную нет, всё зависит от качества реализации JVM на конкретной платформе.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Kangaroo
Дата 23.3.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 21
Всего: 104



Цитата(chaos @  23.3.2009,  07:10 Найти цитируемый пост)
все больше и больше мне нравится ява

затягивает  smile 


--------------------
Lost....
PM MAIL MSN   Вверх
Vitaly333
Дата 23.3.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Вручную нет, всё зависит от качества реализации JVM на конкретной платформе. 

Ну допустим на Windows x86?
PM MAIL   Вверх
SoulKeeper
Дата 23.3.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



Цитата(Vitaly333 @  23.3.2009,  14:38 Найти цитируемый пост)
Ну допустим на Windows x86? 


http://java.sun.com/j2se/1.4.2/1.4.2_whitepaper.html#7


Если в JVM реализована поддержка SSE - то будет SSE, если нет - то не будет. Реализаций JVM десятки, за всеми не угонишся.

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


Бывалый
*


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

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



Цитата

Если в JVM реализована поддержка SSE - то будет SSE, если нет - то не будет. Реализаций JVM десятки, за всеми не угонишся.

Ну например для 1.6.06 под Winx86 как узнать? Может есть какой - нибудь соответствующий ключик? И вы уверенны что если в JVM реализована поддержка SSE то она включена по умолчанию?
PM MAIL   Вверх
ivg
Дата 23.3.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



Vitaly333, а какая связь между циклами, как элементами управления ходом выполнения программы, и пакетными вычислениями с плавающей точкой?
PM MAIL   Вверх
Vitaly333
Дата 23.3.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Vitaly333, а какая связь между циклами, как элементами управления ходом выполнения программы, и пакетными вычислениями с плавающей точкой?

Связь чисто математическая. В интенсивных вычислениях с плавающей точкой (например перемножение двух вещественных матриц и пр.) SSE позволяет получить выйгрыш в скорости за счет выполнения сразу нескольких умножений за такт. Если такие вычисления необходимо реализовать на Java было бы не плохо использовать эту технологию.
PM MAIL   Вверх
ivg
Дата 23.3.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



Цитата(Vitaly333 @  23.3.2009,  18:16 Найти цитируемый пост)
Связь чисто математическая.

Оффтопите значит? smile 
PM MAIL   Вверх
Vitaly333
Дата 25.8.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



И всё таки хотелось бы узнать об различных оптимизациях, которые можно включать и выключать в JVM, особенно относящихся к циклам. Наверняка есть множество соответствующих ключей, особенно у серверной версии HotSpot (выведение кода из тела циклов,развертка цикла, удаление проверки диапазона и.т.д.). Хочется поигратся с различными настройками... где это всё посмотреть? 
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.1071 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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