Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg
Show more📈 Analytical overview of Telegram channel Java Portal | Программирование
Channel Java Portal | Программирование (@java_iibrary) in the Russian language segment is an active participant. Currently, the community unites 11 922 subscribers, ranking 10 472 in the Technologies & Applications category and 53 940 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 11 922 subscribers.
According to the latest data from 26 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 288 over the last 30 days and by 14 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 10.39%. Within the first 24 hours after publication, content typically collects 6.42% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 239 views. Within the first day, a publication typically gains 766 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 3.
- Thematic interests: Content is focused on key topics such as boot, string, void, архитектура, resttemplate.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg”
Thanks to the high frequency of updates (latest data received on 27 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
Map, используя эти данные как ключ.
✅ Для общего кэша нескольких потоков подойдёт ConcurrentHashMap.
✅ computeIfAbsent() вычислит и сохранит значение, если его ещё нет. Последующие вызовы используют сохранённый результат.
var result = cache.computeIfAbsent(key, this::calculate);
Учтите: если вычисление вернуло null или выбросило исключение, результат не сохранится. А для долгоживущего кэша нужны ограничения размера и правила удаления устаревших данных.
👉 Java Portalstatic и final — чем члены класса отличаются от членов экземпляра и как ограничивать присваивание, переопределение и наследование.
• Вложенные и внутренние классы — как объявлять классы внутри других классов и зачем это нужно.
Знать определения недостаточно: попробуйте применить эти принципы в небольшом проекте, например системе заказов или библиотечном каталоге.
👉 Java PortalMap, безразмерном кэше или коллекции, которую никто не очищает, они продолжают занимать память. Это уже может быть утечкой на уровне приложения.
Увеличение -Xmx даст больше времени, но не устранит причину.
Анализируйте heap dump: какие объекты накапливаются, кто хранит ссылки на них и почему они остаются достижимыми.
Важен не только объём занятой памяти, но и причина, по которой объекты всё ещё живы.
👉 Java PortalThreadLocal в долгоживущем потоке.
• Слушатель, который забыли отписать.
«Объект больше не нужен» ≠ «объект недостижим». Поэтому приложение может расходовать всё больше памяти в куче, даже когда сборщик мусора работает исправно.
👉 Java PortalStringBuilder вместо +=.
Строки в Java неизменяемы: при последовательной конкатенации приходится создавать новые строки и копировать накопленное содержимое. Чем больше итераций, тем выше затраты.
StringBuilder добавляет данные в изменяемый буфер, расширяя его при необходимости:
StringBuilder builder = new StringBuilder();
for (String item : items) {
builder.append(item);
}
String result = builder.toString();
Для накопления текста в цикле это обычно эффективнее.
👉 Java Portalfor (int i = 0; i < 1_000_000; i++) {
User user = new User();
}
Многие нужны лишь на время выполнения метода, обработки запроса или промежуточного вычисления. Когда объект становится недостижимым, сборщик мусора может освободить его память.
На этом наблюдении основана слабая поколенческая гипотеза: большинство объектов живут недолго. Поколенческие сборщики мусора используют её так:
• Новые объекты обычно размещаются в молодом поколении.
• Оно очищается чаще: сборщик сохраняет выжившие объекты и освобождает остальную память.
• Достаточно долго живущие объекты переводятся в старое поколение, которое собирается реже.
Так GC может освобождать память короткоживущих объектов, не обрабатывая каждый раз всю кучу.
👉 Java PortalPENDING, APPROVED, REJECTED вместо произвольных строк.
✅ Держите правила допустимых переходов рядом с описанием состояний.
✅ Используйте проверку полноты switch, если язык и выбранная конструкция её поддерживают.
Но enum сам по себе не запрещает неверные переходы — эту логику нужно реализовать отдельно.
👉 Java Portal+:
String message = String.format(
"Пользователь %s оформил %d заказов",
name, orderCount
);
✅ Шаблон отделён от значений.
✅ Проще менять структуру сообщения и добавлять поля.
✅ Для локализуемых сообщений с числами и датами пригодится MessageFormat.
Для простых строк конкатенация вполне уместна: выбирайте форматирование ради читаемости, а не скорости.
👉 Java Portalput() заменяет его значение.
👉 Java Portaljava -jar app.jar
И оно начинает принимать HTTP-запросы. Без отдельной установки Tomcat и развёртывания WAR-файла.
Секрет — во встроенном сервере. Для обычного Spring MVC-приложения зависимость веб-стартера по умолчанию подтягивает Tomcat. Его библиотеки входят в исполняемый JAR, а Spring Boot автоматически настраивает и запускает сервер вместе с приложением.
Это упрощает запуск и развёртывание: приложение и сервер поставляются как единое целое, с согласованными версиями и настройками. Такой JAR удобно запускать локально, на сервере или в контейнере.
Embedded не означает, что сервера нет. Он работает внутри процесса вашего Java-приложения. Tomcat — не единственный вариант: например, приложения на Spring WebFlux по умолчанию используют Reactor Netty.
👉 Java PortalFuture и управлять завершением исполнителя. Конкретная реализация определяет, как выполняются задачи.
ExecutorService executor =
Executors.newFixedThreadPool(10);
Здесь одновременно работают не более 10 потоков. Однако очередь задач у такого исполнителя не ограничена: при постоянной перегрузке она может расти. Для выполнения по расписанию используется ScheduledExecutorService.
Virtual Threads — для большого количества ожидающих задач. Виртуальные потоки стали стандартной возможностью в Java 21. Они особенно полезны, когда задачи много времени проводят в блокирующих вызовах к БД или HTTP-сервисам. Их тоже можно использовать через ExecutorService:
try (var executor =
Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> callExternalApi());
}
Каждая задача получает отдельный виртуальный поток. Создавать пул для переиспользования виртуальных потоков не нужно.
Что важно в продакшене:
• Виртуальные потоки не добавляют процессорных ядер и сами по себе не ускоряют вычисления.
• Тысячи виртуальных потоков не означают, что база выдержит тысячи одновременных запросов. Нужны отдельные ограничения, например пул соединений или Semaphore.
• Ограничение числа рабочих потоков не равно ограничению очереди задач.
ForkJoinPool помогает распараллеливать вычисления. ExecutorService управляет выполнением задач. Virtual Threads позволяют эффективно организовать множество задач, ожидающих I/O.
👉 Java Portal