|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|
Как делать оптимизацию коллектора?16.11.2006, 08:26. Показов 2251. Ответов 9
Метки нет (Все метки)
Мое серверное приложение работает с сетью и базой данных. Поэтому паузы естественны. Но как-то случайно заметил, что есть и паузы, вызванные работой gc. Рискнул отказаться от gc, используемого по умолчанию и включил конкурентный gc, который минимизирует паузы. Эффект превзошел все ожидания. Однако, возможно я нашел не лучшее решение. Только вот хлопотное это дело - экспериментировать на "ходячем" пациенте. Его надо перестартовывать, потом наблюдать. Научное исследование. А как вы тюнинг gc делаете?
0
|
|
| 16.11.2006, 08:26 | |
|
Ответы с готовыми решениями:
9
Как определить ток коллектора p-n-p транзистора? Как улучшить оптимизацию
|
|
1 / 1 / 1
Регистрация: 05.01.2010
Сообщений: 235
|
|
| 16.11.2006, 18:23 | |
|
Может немного и не в тему. Но в абсолютно всех случаях, когда мне хотелось оптимизировать коллектор проблему удавалось решить за счет оптимизации собственной программы.
0
|
|
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|
| 16.11.2006, 19:28 [ТС] | |
|
Если под оптимизацией программы понимать ликвидацию утечек памяти, то, действительно, надо с этого начинать. Если в программе накапливаются неосвобождаемые обьекты, то никакой gc не спасет. Однако в любой программе есть временные обьекты с разным жизненным циклом. Что тут можно оптимизировать?
Поменять gc все же проще. Например, у меня gc, который был по умолчанию, убирал молодые обьекты за 0,008 сек, но несколько раз в день включал FullGC длительностью 30 сек. А конкурентный включается на 0,02 -0,03 сек и таких огромных пауз не делает.
0
|
|
|
1 / 1 / 1
Регистрация: 05.01.2010
Сообщений: 235
|
||
| 16.11.2006, 21:02 | ||
И еще - 30 секунд пару раз в сутки - это разве много? Или идет речь о системе чуть ли не реального времени? Подпихивать сборщик эдак где-то часа в 2 ночи... Ну и лирическое отступление: а пользователям задержки доставляют неудобство? Помню случай, довольно давно разрабатывал базу данных и один отчет (самый главный! ) готовился около 20 минут. Через пару лет работы программы я ужаснулся сему факту и провел коренную оптимизацию (потратил неделю), отчет стал готовится за 30 секунд. А они как включали расчет и уходили на обед, так и делают по сей день (когда приходят через час - все готово)...
0
|
||
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|
| 16.11.2006, 22:05 [ТС] | |
|
Согласен с вашими рассуждениями, но в моем случае 30 сек - это заметно. А относительно идеи не плодить без нужды обьекты и использовать пулы - я тоже так рассуждал и делал. Но это противоречит концепции java. Создатели gc настоятельно этого не рекомендуют.
Кроме того, полностью избежать создания временных обьектов трудно, если приложение общается с внешним миром - по крайней мере новые стринги создаются. И эти новые обьекты, если на них ссылка хотя бы одна и пусть даже кратковременно была, уже имеют шанс быть не убраны во время "быстрой" уборки. Часть новых обьектов может накапливаться в ожидании "полной" уборки. Поэтому правильнее подобрать коллектор с нужной стратегией, чем программировать на java в стиле C, экономя каждый байт и каждый обьект.
0
|
|
|
1 / 1 / 1
Регистрация: 05.01.2010
Сообщений: 235
|
||
| 17.11.2006, 14:31 | ||
0
|
||
|
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
|
| 21.11.2006, 03:42 | |
|
ННП
mselez, ты все правильно сделал. Для этого его -- concurrent gc -- и заимплементили. Из твоего топика не понятно, но я на всякий случай скажу, что существуют два concurrent gc: один -- для эдема, второй -- для остальной кучи. Так вот включаются они поотдельности каждый. Рекомендую включать их оба, так как не могу придумать сценария, когда был бы нужен один, а второй -- нет. А про сбор статистики по количесву объектов каждого типа, и использование затем пулов. Смысла нету. Можно так делать, тока JVM все равно быстрее обработает содание и удаление в большинстве случаев. Я говорю о программе, в которой учитывались при программировании особености GC. А по-другому писать смысла нету =)
0
|
|
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
|
| 21.11.2006, 20:00 [ТС] | |
|
Я использую опцию -XX:+UseConcMarkSweepGC. Судя по логу gc он вроде чистит все - сначала мелкими порциями "свежатину" удаляет, а как только память подбирается к максимуму, делает полную уборку. Используемая память резко (иногда в два три шага) падает. Но главное, паузы меньше секунды.
0
|
|
|
1 / 1 / 1
Регистрация: 05.01.2010
Сообщений: 235
|
||
| 22.11.2006, 14:21 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
|
||
| 22.11.2006, 18:58 [ТС] | ||
![]() Я поставил NetBeans 5.5 , потому что к нему есть дополнительный модуль для профайлинга. Довольно удобная штука - можно в реальном времени понаблюдать за процессами, обьектами и уборкой мусора. Хорошая документация и примеры. Рекомендую. Как я и ожидал, самый интенсивный мусор - это обьекты char[]. Можно также проследить, кто "сорит". У меня это класс StringBuffer. Явной "утечки" нет. Если обьект в момент прихода коллектора имел ссылку, то его возраст увеличивается на 1 . Поскольку момент прихода коллектора непредсказуем, то явно управлять уборкой обьектов сложно - все равно что-то будет убрано сразу, а что-то потом, т.е. будет накапливаться. Думаю, что не "сорить" в java - это утопия.
0
|
||
| 22.11.2006, 18:58 | |
|
Помогаю со студенческими работами здесь
10
как виляет код на оптимизацию Как бы вы разбили бюджет на оптимизацию? Как отключить JIT оптимизацию? Как улучшить оптимизацию сайта? Как js-gui повлияет на поисковую оптимизацию? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|