В этой статье мы разберём, как добавить к файлу класса публичный атрибут. Когда загрузчик классов завершит загрузку модифицированного файла класса, мы увидим то поле, которое добавили вручную.
Читать полностью »
Рубрика «classloader»
Манипуляции с байт-кодом Java
2023-04-08 в 8:01, admin, рубрики: asm, c++, class, classloader, Foo, java, javascript, jit, push, spring, timeweb_статьи_перевод, XML, Блог компании Timeweb Cloud, виртуальная машина, консольКак запустить Java-приложение с несколькими версиями одной библиотеки в 2017 году
2017-09-30 в 13:07, admin, рубрики: classloader, elasticsearch, jarhell, java, java 9, jpms, osgi, serviceloader, split package, модули, плагиныКак запустить Java-приложение с несколькими версиями одной библиотеки в 2017 году
Хочу поделиться решениями одной проблемы, с которой мне пришлось столкнуться, плюс исследование данного вопроса в контексте Java 9.
Писатель из меня ещё тот (пишу в первый раз), поэтому закидывание вкусными помидорами с указанием причин только приветствуется.
Сразу договоримся, что статья не годится в качестве руководства по:
- Java 9
- Elasticsearch
- Maven
Если по последним именам информации в сети полно, то по первому… со временем появится, по крайней мере здесь есть необходимая информация.
Представим себе простую ситуацию: разворачиваем кластер Elasticsearch и загружаем в него данные. Мы пишем приложение, которое занимается поиском в этом кластере. Поскольку постоянно выходят новые версии Elasticsearch, мы привносим в кластер новые проблемы фичи с помощью rolling upgrade. Но вот незадача — в какой-то момент у нас сменился формат хранимых данных (например, чтобы максимально эффективно использовать какую-то из новых фич) и делать reindex нецелесообразно. Нам подойдёт такой вариант: ставим новый кластер на этих же машинах — первый кластер со старой схемой данных остаётся на месте только для поиска, а поступающие данные загружаем во второй с новой схемой. Тогда нашему поисковому компоненту потребуется держать на связи уже 2 кластера.
Android: динамически подгружаем фрагменты из сети
2017-06-18 в 0:43, admin, рубрики: android development, classloader, java, networking, Разработка под androidВ этой статье мы рассмотрим, как загружать классы (в том числе, фрагменты) из сети во время выполнения программы, и использовать их в своем Android-приложении. Область применения подобной технологии на практике — это отдельная тема для разговора, мне же сама по себе реализация данной функциональности показалась довольно интересной задачей.
Приступим.
Как выгрузить dll из Java-машины
2016-10-30 в 23:34, admin, рубрики: classloader, dll, gc, jar, java, library, memory leak, метки: gcJava взаимодействует с операционной системой через методы, помеченные ключевым словом native, при помощи системных библиотек, загружаемых процедурой System.loadLibrary().
Загрузить системную библиотеку очень просто, а вот чтобы ее выгрузить, как оказалось, нужно приложить немало усилий. Как именно выгружаются системные библиотеки, и зачем это нужно я постараюсь рассказать.
Читать полностью »
Расширенный материал по Java 8
2014-07-04 в 12:38, admin, рубрики: classloader, generics, java, java 8, Блог компании GolovachCourses, Учебный процесс в ITНе секрет, что многие Java-программисты, начиная свой путь в индустрии, уделяют большое внимание «тяжелым» технологиям — OpenJPA, Spring, JAX-RS, EJB, WS-*,… Это дает возможность как скорее влиться в современные корпоративные проекты, так и максимизировать скорость роста зарплаты.
Многие из них в конце концов «спускаются» до технологий лежащих в основе указанных фреймворков — JDBC, Servlet API, NIO/NIO.2. Однако прискорбно, что зачастую не остается время на детальное изучение самого языка и возможностей платформы.
Речь идет не о тонкостях или экзотике, а о том, что составляет существенную часть работы фреймворка: Servlet-контейнер использует множественные ClassLoader-ы, JPA2-провайдер использует манипулирование байткодом, абсолютное большинство библиотек используют Reflection API, всеобщее использование Generics только «усугубилось» с появлением функциональных интерфейсов (java.lang.function.*) и лямбд.
На недопонимание изначальной платформы (ClassLoader, Reflection API) накладываются «новвоведения» Java 5 (Generics), а теперь еще и Java 8 (методы в интерфейсах, ссылки на методы, лямбды, Stream API, JSR 308: Pluggable Type Systems). Надо обратить внимание на то, что Generics + Java 8 — это не просто языковые фичи, это частично переход к функциональному стилю программирования.
Я собрал определенное количество полезных (на мой взгляд) ссылок по следующим темам
- Методы в интерфейсах, ссылки на методы, множественное наследование
- Лямбды (Project Lambda)
- Stream API
- Функциональные алгоритмы
- Аннотации
- Генерики
- Reflection API
- Загрузка классов
Надеюсь кто-то сочтет их полезными.
Читать полностью »
Определяем все классы, которые использует приложение на Java
2012-04-11 в 14:33, admin, рубрики: classloader, java, Песочница, метки: classloader, javaБез сомнения каждый, кто в своем резюме указывает опыт разработки на Java, хоть раз в жизни писал строки
public static void main(String[] args)
компилировал их и запускал на выполнение командой наподобие java HelloWorld
.
Но многие ли знают, что происходит внутри JVM от момента выполнения этой команды до того как управление передается методу main, как Java находит и загружает необходимые пользователю классы? Возникшая однажды производственная задача заставила автора разобраться в этом вопросе. Результаты изысканий под катом. Сразу стоит оговориться, что статья не претендует на полноту охвата всех существующих JVM, тестирование проводилось только на Sun HotSpot JVM.
Читать полностью »
Загрузка классов в серверах приложений, особенности JBoss AS 7
2012-03-16 в 14:39, admin, рубрики: classloader, intellij idea, java, jboss, jboss as 7, jvm, maven, метки: classloader, intellij idea, java, jboss, jboss as 7, jvm, mavenJava характеризуется динамической загрузкой классов. Для поиска и загрузки используется механизм делегирующих classloader'ов. В Java SE окружении их количество ограничивается 2-3, но в серверах приложений оно приближается к 10 иерархическим classloader'ам. Этим объясняется большое время запуска (обычно от минуты) и деплоя приложений.
В JBoss AS 7 разработчикам удалось сильно сократить время запуска (пустой appserver запускается за 3-4 секунды на рабочей станции). Этому способствовала новая система загрузки классов в данном сервере приложений. Такой подход всё же обладает своими недостатками.
Данная статья касается механизма загрузки классов в различных окружениях, особенностях работы с JBoss AS 7, сопряжения с системой сборки Apache Maven и IDE IntelliJ IDEA.
Читать полностью »