Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511

Многопоточное формирование строк по шаблону

09.12.2018, 11:53. Показов 961. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте! Имеется такой код:
Java
1
2
3
4
5
private void accept(String template, Object... args) {
        ...
        String value = String.format(template, args);
        ...
}
И примерно 50 констант - строк template-ов
Количество аргументов либо 1 либо 2.
Очень горячее место в коде, десятки потоков дергают это место сотни раз в секунду.
Вопрос: есть ли разница в производительности если я разделю этот метод на 2шт. заменив Object... args на метод с Object o1 и на второй метод с Obkect o1, Object o2. Или может JIT это и так за меня сделает? Или будут затраты на обертывание в массив?
Но вообще String.format очень медленный, и много памяти под себя выделяет.
Сначала у меня была идея создать на каждый из template-ов по одному StringBuilder-у и они append этот шаблон и на нужные места insert нужные значения.
Но если 2 потока дернут один метод, тогда 1го экземпляра StringBuilder мало и они друг другу мешают.
Может есть способы заменить String.format на что то получше?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2018, 11:53
Ответы с готовыми решениями:

Формирование отчетов excel по шаблону
Всем, привет. нужна помощь) В интернете нашел архив где из документа EXCEL через макрос создаются документы по каждой строке) открыв пример...

Формирование Excel документа по шаблону данными из БД
Здравствуйте. У меня есть шаблона Excel, я хочу чтобы в документ такой-же(таки-же поля,разбияния колонок и тп) передавались данные из...

Формирование матрицы по шаблону и вывод в файл построчно
Помогите плиз. С клавиатуры вводится порядок квадратной матрицы.Требуется формировать матрицу по шаблону и вывести в файл построчно. ...

7
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.12.2018, 12:25
Цитата Сообщение от zuxa-zuxa Посмотреть сообщение
Вопрос: есть ли разница в производительности если я разделю этот метод на 2шт. заменив Object... args на метод с Object o1 и на второй метод с Obkect o1, Object o2. Или может JIT это и так за меня сделает?
для этого есть всякие утилиты типа JMH, JMC и другие профайлеры. Если ты их ещё не используешь, то скорее всего ты делаешь оптимизацию методом тыка (судя по твоим прошлым постам так и есть). Этот метод тебя никуда не приведет.
Если хочешь действительно заняться оптимизаций нужных участков кода, используй для начала эти утилиты чтобы найти такие участки, затем пробуй оптимизации опять же проверяя результаты. Тогда подобных вопросов не возникнет. На такие вопросы впринципе обычно невозможно дать ответ без глубокого погружения в контекст.
1
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
09.12.2018, 12:55  [ТС]
KEKCoGEN, пользуюсь Java Fligth Recorder и именно он говорит, что методы горячие. Беру самое верхнее место и выковыреваю в нем чего нибудь, потом заново запускаю профайлер и там уже другое место 1. И т.д. вот теперь String.format на первом месте.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.12.2018, 13:31
zuxa-zuxa, то что методы вызывеются много раз не говорит о том, что там проблемы с перформансом.
0
19 / 19 / 1
Регистрация: 12.03.2018
Сообщений: 252
09.12.2018, 17:56
Для многострочного форматирования предлагаю использовать Freemarker
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.12.2018, 21:38
Artyr2, вопрос не читал?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
10.12.2018, 11:47
Цитата Сообщение от zuxa-zuxa Посмотреть сообщение
Сначала у меня была идея создать на каждый из template-ов по одному StringBuilder-у и они append этот шаблон и на нужные места insert нужные значения.
Но если 2 потока дернут один метод, тогда 1го экземпляра StringBuilder мало и они друг другу мешают.
Что мешает создавать StringBuilder в методе?

Добавлено через 4 минуты
Цитата Сообщение от zuxa-zuxa Посмотреть сообщение
Может есть способы заменить String.format на что то получше?
Вот тут как раз об этом. Вкратце, предлагают использовать MessageFormat.
1
Мишка Косолапый :)
 Аватар для zuxa-zuxa
285 / 255 / 86
Регистрация: 15.02.2012
Сообщений: 1,511
10.12.2018, 17:15  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Что мешает создавать StringBuilder в методе?
Вот пока на этом варианте остановился, выглядит неплохо по первым тестам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2018, 17:15
Помогаю со студенческими работами здесь

Замена значений в .DOCX файле, без наличия MS Word у пользователей или формирование договоров и счетов по шаблону
Здравствуйте! Сделал в MS WORD файл .docx в котором текст договора, а там где реквизиты компании - нужно подставлять значения переменных....

Многопоточное чтение строк из файла
нужно реализовать чтение строк из файла и передавать строку в функцию. Но это должно быть в многопоточном режиме. что то вроде... задаем...

Разбиение строк по шаблону
Добрый день, подскажите как разбить строку по шаблону К примеру файл /etc/passwd - его шаблон "username: pswd:uid:gid:uid...

Добавление строк по шаблону
Доброго дня! Я понимаю, что задача, которая возникла передо мной с моими знаниями не выполнима.. Поэтому надеюсь хоть на какую-то...

Редактирование строк по шаблону
Есть исходный TStringList со строками и TEdit, куда пользователь вводит шаблон. Требуется реализовать редактирование строк по шаблону....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru