Почти каждый Java разработчик знает, что программы, написанные на языке Java изначально компилируются в JVM-байткод и хранятся в виде class-файлов стандартизованного формата. После попадания таких class-файлов внутрь виртуальной машины и пока до них еще не успел добраться компилятор, JVM интерпретирует байткод, содержащийся в этих class-файлах. Данная статься содержит обзор принципов работы интерпретатора применительно к OpenJDK JVM HotSpot.
Рубрика «java» - 43
Инициализация и работа интерпретатора байткода в JVM HotSpot под x86
2019-09-28 в 15:12, admin, рубрики: java, jvm monitoringВместо вступления
Всё началось с того, что мне захотелось изучить тонкости настройки Gradle, понять его возможности в Android разработке (да и вообще). Начал с жизненного цикла и книги, постепенно писал простые таски, попробовал создать свой первый Gradle плагин (в buildSrc) и тут понеслось.
Решив сделать что-то, приближенное к реальному миру Android разработки, написал плагин, который парсит layout xml файлы разметки и создает по ним Java объект со ссылками на вьюхи. Затем побаловался с трансформацией манифеста приложения (того требовала реальная задача на рабочем проекте), так как после трансформации манифест занимал порядка 5к строк, а работать в IDE с таким xml файлом довольно тяжело.
Так я разобрался как генерировать код и ресурсы для Android проекта, но со временем захотелось чего-то большего. Появилась мысль, что было бы круто трансформировать AST (Abstract Syntax Tree) в compile time как это делает Groovy из-под коробки. Такое метапрограммирование открывает много возможностей, была бы фантазия.
Дабы теория не была просто теорией, я решил подкреплять изучение темы созданием чего-то полезного для Android разработки. Первое, что пришло на ум — сохранение состояния при пересоздании системных компонентов. Грубо говоря, сохранение переменных в Bundle максимально простым способом с минимальным бойлерплейтом.
Топ 20 навигационных фич в IntelliJ IDEA. Часть 2
2019-09-27 в 14:25, admin, рубрики: android, intellij idea, java, Блог компании OTUS. Онлайн-образование, Разработка под androidПеревод статьи подготовлен специально для студентов курса «Android-разработчик. Продвинутый курс». И хотя в данном материале речь пойдет преимущественно о Java, материал будет полезен Android-разработчикам
Первая часть тут
Читать полностью »
Заменить Object на var: что может пойти не так?
2019-09-27 в 6:13, admin, рубрики: boxing, generics, java, lvti, type inference, вывод типов, дженерики, Занимательные задачки, ПрограммированиеНедавно я столкнулся с ситуацией, что замена Object на var в программе на Java 10 приводит к исключению в процессе выполнения. Мне стало интересно, много ли разных способов добиться такого эффекта, и я обратился с этим вопросом к сообществу:
Оказалось, что добиться эффекта можно разными способами. Хотя все они несильно сложные, но на примере такой задачки интересно вспомнить о разных тонкостях языка. Давайте посмотрим, какие удалось найти способы.
Пишем на Java для Nintendo DS
2019-09-26 в 11:35, admin, рубрики: java, nintendo ds, гик-порно, мобильная разработка, Разработка под Java ME, старое железо
Введение
Все началось с того, что я случайно нашел список homebrew программ (программы, разработанные усилиями пользователей для устройств, не предназначенных для запуска пользовательского ПО) для Nintendo DS и в нем увидел одну очень интересную строчку, а именно: «Pstros NDS — MIDP implementation run on the CLDC java machine compiled for NDS».
Будучи большим поклонником Java и Nintendo DS я решил разобраться, что это за зверь такой, и по возможности попробовать написать под эту JVM свое приложение. Тех, кому это интересно прошу под кат.
Читать полностью »
Apache, ViewState&Deserialisation
2019-09-25 в 12:01, admin, рубрики: Apache, cybersecurity, java, security, безопасность, Блог компании T.Hunter, информационная безопасность, сериализация, сериализация сложного объекта, уязвимостьВ данной статье рассмотрим уязвимость на основе подмены сериализованного Java-объекта ViewState и метод её эксплуатации на примере web-приложения виртуальной машины с HackTheBox, использующей технологию Apache MyFaces.
Эволюция создания веб-приложений на Java
2019-09-22 в 20:24, admin, рубрики: grails, GWT, j2ee, jakartaee, java, javascript, jee, jhipster, jsf, jsr, microprofile, play, spring, spring boot, spring webflux, struts, vaadinИстория развития построения веб-приложений на языке программирования Java с примерами их использования на временном промежутке от появления спецификации сервлетов до сегодняшнего дня.
Как я создавал «WildMAN» — пародию на множество 8-битных игр и недавно ее портировал на Android
2019-09-22 в 9:50, admin, рубрики: Battle Toads, dendy, game engine, java, sega, Super Mario, WildMan, Игры и игровые приставки, разработка игр, Разработка под androidЯ думаю каждого фаната приставочных игр интересовала тема создания игр и была мечта создать свою игру, в студенческие годы я увлёкся программированием.
Безопасность в AEM – это вопрос платформы или способа внедрения?
2019-09-20 в 14:46, admin, рубрики: aem, content management system, cybersecurity, java, безопасность данных, информационная безопасность, Разработка под e-commerceАвтор: Андрей Пинчук | Certified Senior AEM Developer
Представьте ситуацию: вы спокойно спите и видите свой третий сон, как вдруг раздается телефонный звонок — недовольный клиент жалуется, что вся система недоступна. Согласитесь, подобные события — дискомфорт для жизни AEM-разработчика, всей команды и провайдера решения. Ничего не попишешь, ранний подъем и поиск решения впереди.
Чтобы в вашей профессиональной жизни не встречалось таких нерадостных моментов, расскажу о типичных проблемах безопасности и как от них лучше застраховаться.
Внутренности JVM, Часть 1 — Загрузчик классов
2019-09-20 в 12:19, admin, рубрики: java, Java Virtual Machine, Jdk 11, Блог компании OTUS. Онлайн-образование, ПрограммированиеПеревод статьи подготовлен специально для студентов курса «Разработчик Java».
В этой серии статей я расскажу о том, как работает Java Virtual Machine. Сегодня мы рассмотрим механизм загрузки классов в JVM. Читать полностью »