![]() |
|
Модераторы: LSD, AntonSaburov Страницы: (80) « Первая ... 6 7 [8] 9 10 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: 5 Всего: 9 |
Domestic Cat - большое спасибо за информацию !!!
очень интересно -------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
2. Первоначально хип имеет достаточно маленький размер. По мере его заполнения, JVM
пытается высвободить место, убирая мусор. Если это не удается, JVM увеличивает размер хипа. Если программа создаэт много обэктов в короткий промежуток времени, то JVM много времени будет уделять перезапускам gc, увеличениям хипа, и т д. Чтобы минимизировать сборку мусора, нужно изначально создавать достаточно большой хип. Чтобы узнать необходимый размер, проведем мониторинг памяти:
Программа определяет минимальный/максималный размер хипа, выделенной памяти и приращения. Для сбора данных я из цикла вызиваю метод takeSample(); при выходе/заверщении просто передаю обэкт класса MemMonitor в System.out. При запуске того же шутера я получил:
(Желательно конечно поработать дольше) За время выполнения было сделано 29 уборок мусора на молодом хипе, и 11 - на старом, что заняло около 4 секунд! Видно, что JVM начинает с хипа в 4 мб; он увеличивается до 40 мб. Чтобы посчитать приблизительный размер молодого хипа, учтем ,что приращение за 1 фрейм составляет 162.8 кб; при прорисовке 10 фрэймов/сек за 10 сек мы получим ~ 10 мб идет в молодой хип. Скажем JVM теперь что изначально нужно 40 мб хипа и 10 мб молодого хипа: java -Xms40m -Xmn10m -verbose:gc Test Вот что я получил:
Всего 4 уборки мусора на молодом хипе - и игра идет гораздо плавнее Это сообщение отредактировал(а) Domestic Cat - 8.7.2004, 17:05 -------------------- |
||||||
|
|||||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: 5 Всего: 9 |
у меня вот эта команда
java -Xms40m -Xmn4m -verbose:gc Test ничего не выдает пустую строку -------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Имеется в виду, что Test- название вашего java-класса; кроме того программа должна создавать МНОГО обьектов, иначе просто сборшик мусора не запускается - собирать нечего. Чтобы подключить MemMonitor, нужно из цuкла (например, цuкла анимации) вызывать takeSample(). Добавлено @ 16:53 Попробууте такую программу:
java -verbose:gc Test u поекспериментируuте с размерами хипов. -------------------- |
||||
|
|||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: 5 Всего: 9 |
Спасибо ! все получилось
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: 5 Всего: 9 |
А вы не могли рассказать про способы оптимизации Java програм ?
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Не претендую на абсолютную истину, но попробую. Не оптимизируйте! Пишите программы, которые понятны, легко дебагить и модифицировать. На самом деле конечно оптимизировать нужно. Чтобы понять что оптимизировать, помните, что в основном нагрузка приходится на 10-20% кода. Узнать какой метод наиболее задействован мозжно, запустив с флагом -Xprof. На самом деле HotSpot и JIT (Just-In-Time Compiler) делают большую работу по оптимизации. Можно легко найти инфо по этому вопросу. В целом же оптимизация программы программистом сводится к: 1. Использованию оптимальных алгоритмов. Например, для быстрого поиска используйте HashMap, он быстрее чем, скажем TreeMap. 2. Старайтесь использоват побитовые операции. Вместо х/32 луче использоват х >> 5; вместо х % 32 - х & 31 (31 = 32 - 1). Работает только для степеней 2. 3. Заменяйте умножение на суммирование, возведение в степень - на умножение. 4. Используйте готовые таблицы значений. Например, если нужно считать синус/косинус и большая точность вычислений не нужна, используйте готовую таблицу для синуса. 5.Заменяйте операции с float, double на операции с int и делайте кастинг назад в float (тут на предыдущей странице пример есть ) 6. Используйте Buffered{}Stream 7. Если нужен рандом -доступ к большим файлам (несколько мб), используйте memory-mapped files (см MappedByteBuffer в Java API). Программа может читать из MappedByteBuffer почти так же быстро, как из памяти. Это сообщение отредактировал(а) Domestic Cat - 8.7.2004, 18:08 -------------------- |
|||
|
||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: 5 Всего: 9 |
Большое спасибо .... мотаем на ус ...
Вот при компиляции javac версии 1.4 без флагов используется технология HotSpot и JIT или это специальные программы выполняют стандартный компилятор это не делает ? -------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
При компиляции javac делает небольшие оптимизации (можно ради интереса декомпильнуть class-фаuл и посмотреть).
"Еше" больше oптимизировать можно, компилируя с флагом -O, но я особоu разницы не замечаю. JIT же, как следует из названия, дополнительно компилирует при запуске JVM (java MyClassName), на 1.4 тоже; причем его оптимизации очень сушественные. Опять-таки, дополнительную оптимизацию дает запуск с флагом -server (java -server MyClassName), например, тогда JIT может "развернуть" цuклы. Это сообщение отредактировал(а) Domestic Cat - 8.7.2004, 18:15 -------------------- |
|||
|
||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: 5 Всего: 9 |
понятно спасибо !
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Не за что
Ну и вопрос в тему: как сменить иконку java-программы с "Hot Java" на какую-нибудь другую? -------------------- |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
setIconImage()
У меня нет -Xmn в списке команд А есть возможность узнать распределение по старому и молодому хипу програмно? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
работает не всегда. Меняет ли он иконку на панели задач?
- в списке (java -X) ее нет, но работает
Po-moemu, нет. Можно узнать только размер всего хипа. -------------------- |
||||||
|
|||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Под виндами меняет и на панели задач и у диалоговых окон для которых это установленно как родительское. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Тогда соррu. На Маке не меняет, зато
-Xdock:icon=logo.gif работает Это сообщение отредактировал(а) Domestic Cat - 8.7.2004, 21:16 -------------------- |
|||
|
||||
![]()
|
| Правила форума "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. |