В Java сборщик мусора освобождает память, но иногда объекты всё равно «застревают» в памяти, что приводит к утечкам. Одним из эффективных способов предотвращения этого является использование WeakReference.
WeakReference позволяет ссылаться на объект без блокировки его сборщиком мусора. Если объект имеет только слабые ссылки, сборщик может его освободить. Пример создания слабой ссылки:
WeakReference<MyObject> weakReference = new WeakReference<>(new MyObject());
Теперь, если к MyObject не будет других сильных ссылок, сборщик сможет освободить его.
Как проверить и использовать WeakReference?
Чтобы использовать объект, на который указывает WeakReference, сначала убедитесь, что он не был собран сборщиком мусора:
MyObject obj = weakReference.get();
if (obj != null) {
// Объект еще в памяти
obj.performTask();
} else {
// Объект освобожден
}
Пример применения: кеширование данных
Использование слабых ссылок полезно для кеширования, так как сборщик может автоматически очистить кэшированные данные, если в памяти возникнет нехватка:
Map<String, WeakReference<Data>> cache = new HashMap<>();
Data data = fetchData("item1");
cache.put("item1", new WeakReference<>(data));
Если data больше нигде не используется, сборщик освободит его при необходимости.
Жми 🔥 если понравился пост
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍2🤝2
📖 Современный язык Java
⬇️ Скачать книгу
📣 Java Ready | #книга
Книга охватывает все аспекты работы с Java, начиная с основ и заканчивая сложными темами, такими как многопоточность, обработка исключений и работа с сетью.
Автор: Марио Фуско
Год: 2020
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3👎1
В этом посте рассмотрели работу с многопоточностью в Java и создание параллельных потоков для повышения производительности:
• Создание и запуск потоков
• Управление потоками с помощью ExecutorService
• Синхронизация и безопасность данных
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥9🤝9
This media is not supported in your browser
VIEW IN TELEGRAM
Hilla — это фреймворк для разработки веб-приложений на Java, позволяющий создавать фронтенд и бэкенд на единой платформе, с использованием интуитивного API для безопасного взаимодействия между клиентом и сервером.
📌 Ссылочка: https://vaadin.com/hilla
👉 Java Ready | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4
В Java внутренние классы часто помогают организовать код, особенно когда нужно инкапсулировать вспомогательные структуры. Но у этой функциональности есть и риски, которые стоит учитывать
Внутренний класс может быть связан с внешним экземпляром, поэтому у него есть доступ ко всем полям и методам внешнего класса, включая приватные. Это удобно, когда нужно передать данные или логику, не раскрывая их наружу
public class Outer {
private String message = "текст";
class Inner {
void display() {
System.out.println(message);
}
}
}
Создание экземпляра внутреннего класса:
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.display(); // Вывод: текст
Но тут кроется опасность: если внутренний класс долго остается в памяти, это может удерживать ссылку на внешнюю сущность, создавая риск утечек памяти. Чтобы избежать этой проблемы, лучше использовать статический внутренний класс:
public class Outer {
static class StaticInner {
void display() {
System.out.println("Привет из статического внутреннего класса!");
}
}
}
Outer.StaticInner inner = new Outer.StaticInner();
inner.display();
// Вывод: Привет из статического внутреннего класса!
Использование статического класса помогает избежать ненужных связей с экземпляром внешнего класса.
Ставь 🔥 если понравился пост
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍2👎1
В этой статье:
• Вы узнаете про преимущества и перспективы изучения Java для новичков.
🔊 Если заинтересовало, продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Коллекции Java — это набор структур данных, упрощающих управление информацией. Выбор подходящей коллекции может значительно улучшить производительность программы и упростить жизнь разработчика!
Разбор популярных структур данных:
1. ArrayList — гибкий и быстрый список для хранения упорядоченных данных
ArrayList<String> list = new ArrayList<>();
list.add("Java"); // добавление элемента в список
list.add("Python");
list.remove("Java"); // удаление элемента
Что это дает? ArrayList — это динамический массив, который автоматически расширяется при добавлении новых элементов.
2. HashMap — ключ-значение для быстрого поиска и доступа. Быстро ищет и сохраняет данные по уникальным ключам:
HashMap<String, Integer> map = new HashMap<>();
map.put("Java", 1995); // добавление пары "ключ-значение"
map.put("Python", 1991);
map.remove("Java"); // удаление по ключу
3. HashSet — хранилище уникальных значений:
HashSet<String> set = new HashSet<>();
set.add("Java"); // добавление элемента
set.add("Python");
set.add("Java"); // дубликат не добавится
HashSet хранит только уникальные элементы, что полезно для фильтрации дубликатов.
Жми 🔥 если понравился пост
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍4
В этом посте рассмотрим базовые принципы создания неизменяемых коллекций в Java, также вы узнаете для чего они нужны.
• Неизменяемый список
• Неизменяемое множество
• Неизменяемый Map
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🤝8👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Solo Learn — это обучающая платформа, которая предлагает интерактивное обучение, сразу с практическими заданиями и теорией
📌 Ссылочка: sololearn.com
📣 Java Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥5😁1
— В этом посте рассморели Класс Files в Java, который упрощает работу с файлами, предоставляя классные методы для работы
- Чтение файлов
- Запись в файл
- Проверка файла на существование
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22🤝11👍5