![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| polosatij |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 1 Всего: 8 |
и всё с ней связанное:
народ! нужна информация по оптимизации например, кто скажет, что работает быстрее: Vector() или ArrayList() может есть что-то другое, побыстрее? например, на http://forum.vingrad.ru/index.php?showtopic=24799&st=90 нашёл очень полезную для меня инфо. Еще цитируя Domestic Cat:
может еще кто что подскажет на это тему Domestic Cat, я не совсем понял, что ты подразумеваешь под: 6. Используйте Buffered{}Stream не объяснишь? ещё на эту тему:
млин! у меня большая проблема с передачей Диалогу: new Frame(). У меня такое ощушение, что new Frame() ест очень много памяти! из за этого похоже.. если я быстро вызываю новый Диалог (скажим, 2 раза подряд), всё моё приложение зависает на вечность если я передаю в Диалог -> null, то получаю исключение: nullOwnerException. есть ли другие методы заранее БОЛЬШОЕ паси |
||||
|
|||||
| redrick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: 3 Всего: 5 |
Buffered{}Stream = BufferedInputStream || BufferedOutputStream
ну буффер у них там есть - что тут еще скажешь : ...an application can write bytes to the underlying output stream without necessarily causing a call to the underlying system for each byte written. -------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
| Domestic Cat |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
ArrayList почти тo ж самоe что i Vector, только несинхронизованный. Следовательно, он быстрее.
Буффированный стрим пишет(читает) сначала в буфер, когдa буфер заполняется, sодержимое передается системе. это быстрее, чем передавать системе каждый байт. все этo в апи ест:
U диалогa должен быть владелец - другой диалог или фрейm. Передавaй ему ссылку на уже имеющийся фрейм / диалоg или пользуйся чем либо другим JOptionPane, JWindow -------------------- |
||||||||
|
|||||||||
| polosatij |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 1 Всего: 8 |
я javax.swing.*; не могу использовать.. у меня нет имеюшегося Фрэйма -> Applett. А Аплет не может выступить "прородичем" |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Значит, передавай всем диалогам ссылку нa один и тот же фрейм:
-------------------- |
|||
|
||||
| Sleepy_PIP |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
я несколько не понял цитаты DomestikCat - по поводу арифметики. - я всегда считал и считаю что мат. сопроцессор, который теперь есть везде, в любом ядре любого процессора на ПС будет гораздо лучше меня вычислять умножения (нет, не степени 2-ки - хотя и там оптимизация есть!), деления, и тем паче синусы и пр. тригонометрию. На самом деле мат. сопр - если разбираться в его кишках - в основном через таблицы и действует, редко когда через алгоритмы. но даже если через алгоритмы - это все равно будет быстрее доступа до элемента массива на J ИМХО конечно. т.е. эту цитату можно воспринимать как - "JVM не использует мат сопроцессор"????? Не, правда - для меня это будет открытием. -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||||
|
|||||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Дело здесь в том, что если считаешь sin/cos в Java, тo обрашется она к нативным функциям. Просмотреть значние в "своем" массиве будет быстрее, тем более еслi не нужна большая точн ость. -------------------- |
|||
|
||||
| Sleepy_PIP |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
эээ ... разве 4-5 тактов процессора быстрее доступа к элементу массива в J (нет, я правда не знаю - но сопр за 4-5 тактов любую операцию сделает). Добавлено @ 20:21
тоесть я хотел сказать - это реально проверяли? и доступ к массиву быстрее сопроцессора? если действительно так - может JVM просто сопроцессор не использует? Я правда не знаю и интересуюсь ... -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||||||||
|
|||||||||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
сaм ВЫЗОВ нативноgo метоda медленнее Добавлено @ 20:23
могем и бенчмарк забацать ... после перекурa =) -------------------- |
||||
|
|||||
| Sleepy_PIP |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
нее, погоди. я опять не понял. Если байт-код синуса не транслируется JVM в непосредственную команду сопроцессора - то так и будет. Дело в том, что речь насколько я надеюсь не о найтивных методах - а о ASM командах сопроцессору. Если JVM действительно транслирует вызовы скажем тригонометрии в вызовы какой-либо библиотеки - то да, но если напрямую в команду сопроцессора - то сопроцессор должен быть быстрее всех ... Вообщем пошел проверять -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||
|
|||||
| Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Вот такоj тест:
Результаты 3x запусков:
Это сообщение отредактировал(а) Domestic Cat - 26.11.2004, 20:51 -------------------- |
||||||
|
|||||||
| Sleepy_PIP |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
ничего себе. тоесть Math.cos(0.54231f); не транслируется в прямые вызовы сопроцессора. Так понять это? как-же так ... обидно ужас ... сопр. есть, но не используется Добавлено @ 21:02 жаль что не прошли времена когда о математике надо было заботиться. и жаль что это теперь в J ... теперь надо быть осторожнее в 10 крат. Спасибо! -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||||||
|
|||||||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
JVM - это "надстройка " над ОС, напрямую она ничего не вызывает. Это сообщение отредактировал(а) Domestic Cat - 26.11.2004, 21:10 -------------------- |
|||
|
||||
| Sleepy_PIP |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
да. мои заблуждения глубоки. учимся далше. .... -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||
|
|||||
| polosatij |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 1 Всего: 8 |
ещё один линк на тему оптимизации:
Оптимизация Java программ Добавлено @ 21:59 вот, откопал то, что, наверно, не только мне одному интересно будет прочитать ( и не один раз ) Объекты 1. уменьшайте число временных объектов (в том числе внутри циклов); 2. по возможности используйте старые объекты, не создавайте новых; 3. контролируйте процесс создания объектов * пишите простые конструкторы; * используйте метод clone(); * используйте методы для создания объектов: * public MyObject getInstance() { return new MyObject();} String 1. используйте метод append() класса StringBuffer взамен конкантации строк; 2. используйте массив char[] array для создания строки, а не класс StringBuffer; 3. используйте запись String myString = "Hello!"; вместо String myString = new String("Hello!"); 4. метод equalsIgnoreCase() работает быстрее, чем equals(), если длины строк не равны. Поля классов и экземпляров классов 1. используйте ключевое слово final для создания неизменных объектов; 2. избегайте повторной инициализации полей экземпляра класса; 3. делайте методы static/private; 4. время, затраченное на вызов метода, оценивается примерно по следующей схеме: static < final < instance < interface метод < synchronized метод. Память 1. используйте WeakReference для хранения элементов в больших таблицах; 2. используйте SoftReference для кэширования элементов; 3. используйте SoftReference для повторного использования памяти; 4. для замера времени исполнения фрагмента кода вызывайте System.gc(); Методы 1. не используйте без причины приведение типов; 2. не пишите громоздких методов; 3. операторы "n+=4" быстрее, чем "n=n+4"; 4. оператор int++ быстрее, чем short++ or byte++; 5. избегайте деления переменных типа long; 6. используйте итерацию, а не рекурсию. Синхронизация 1. по возможности избегайте синхронизации; 2. синхронизируйте блок, а не метод; 3. не используйте синхронизацию в циклах; 4. создавайте/используйте мониторы (Monitors) и мютексы (Mutex) взамен обыкновенной синхронизации. Класс Doubles 1. Double.toString(double) метод – очень медленный; 2. не создавайте Double-объект из строки; Общие советы 1. выполнение System.currentTimeMillis может занимать около 0.5ms; 2. научитесь понимать байт-код. Это сообщение отредактировал(а) polosatij - 26.11.2004, 22:01 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |