Может ли Java-приложение использовать больше памяти, чем размер кучи?
Возможно, вы замечали, что Java-приложение может превышать лимит памяти, указанный в параметре -Xmx (максимальный размер кучи). Дело в том, что JVM помимо кучи использует и другие области памяти. Давайте начнем со структуры памяти Java-приложения и источников потребления памяти. Читать
Выходя за рамки JUnit. Создаем сложные расширения
Переход от JUnit4 к новой версии во многом изменил способ расширения функциональных возможностей тестов. В JUnit4 основным механизмом расширения были правила, которые могли обернуть выполнение теста в дополнительную логическую обработку. Например, в реализации абстрактного класса ExternalResource встраивали два дополнительных вызова методов инициализации и финализации. Модель JUnit 5 существенно дополнена, и в этой статье мы рассмотрим, как можно создавать собственные расширения для JUnit Platform.
Запросы к MongoDB из Java с помощью билдера фильтров
В этой статье разберемся, как использовать класс Filters для запросов к MongoDB. Читать
JDBC vs JPA
В мире разработки программного обеспечения очень любят аббревиатуры. И работа с базами данных в Java — не исключение. Наличие множества вариантов работы с БД может запутать: что же я использую на самом деле? Все используют JPA? Мне тоже стоит его использовать? Но я еще слышал о Spring Data JDBC. А как насчет Spring Data JPA? В этой статье мы поговорим о JDBC и JPA: истории появления и некоторых особенностях.
Java библиотека для работы с внешним сервисом по протоколу RESTful API
Для работы с внешними сервисами по протоколу RESTful API обычно бывает вполне достаточно встроенных средств языка Java или внешних библиотек, используемых в коде приложения там, где это необходимо. Пример – библиотека java.net.http.HttpClient, пользоваться ей очень легко. Для Spring Framework все еще лучше – встроенный RestTemplate позволяет делать почти все. Однако, иногда в разработке может возникнуть ситуация, когда этого недостаточно.
Рассмотрим именно такую ситуацию на примере mlsgrid — коммерческого RestAPI для получения информации об объектах недвижимости. Читать далее
Как сгенерировать UUID в качестве первичных ключей при помощи Hibernate
Большинство разработчиков предпочитают числовые первичные ключи, потому что они эффективны в использовании и их легко сгенерировать. Но это не означает, что первичный ключ должен быть числом.
Например, в последние годы приобрели популярность UUID. Основным преимуществом UUID является его глобальная уникальность, которая дает огромное преимущество для распределенных систем. Читать дальше
Парсинг JSON с помощью Jackson
Большая часть веба на сегодняшний день обменивается данными в формате JSON. Веб-серверы, веб-приложения и мобильные приложения, даже устройства IoT общаются друг с другом, используя JSON. Простой и гибкий способ обработки JSON необходим любому программному обеспечению, чтобы выжить в современном мире. Продолжение
FAQ по var в Java
Локальные переменные — это «рабочие лошадки» Java. Они используются для хранения промежуточных результатов вычислений. И, в отличие от полей, объявляются, инициализируются и используются в одном блоке. Для понимания кода часто более важны имя и инициализатор, чем тип локальной переменной. В имени и инициализаторе столько же информации, сколько и в типе. Читать далее
JUnit: тестирование методов, вызывающих System.exit()
В определенных ситуациях нам может потребоваться, чтобы метод вызывал System.exit()
и завершал работу приложения. Например, в случае если приложение должно быть запущено только один раз, а затем завершено, или в случае фатальных ошибок, таких как потеря соединений с базой данных.
Если метод вызывает System.exit()
, вызвать его из юнит-тестов и делать ассерты становится трудно, потому что это приведет к завершению юнит-теста. В этом посте мы рассмотрим, как тестировать методы, вызывающие System.exit()
с использованием фреймворка JUnit.
Абстрактные классы и интерфейсы в Java
Абстрактные классы и интерфейсы встречаются повсюду как в Java-приложениях, так и в самом Java Development Kit. Каждый из них служит своей цели:
- Интерфейс — это контракт, который должен быть реализован конкретным классом.
- Абстрактный класс похож на обычный, но отличается тем, что может содержать абстрактные методы — методы без реализации, и нельзя создать экземпляр абстрактного класса.
Многие разработчики не видят разницы между интерфейсами и абстрактными классами, но на самом деле между ними есть существенное различие.