Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Загрузчики классов в Java - коллекция граблей
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Anton Arhipov
April 24, 2013
Technology
580
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблей
Anton Arhipov
April 24, 2013
More Decks by Anton Arhipov
See All by Anton Arhipov
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
650
Spec-Driven Development with AI Agents (Workshop, May 2026)
antonarhipov
4
570
Spec-Driven Development with AI Agents. Java Day Istanbul 2026
antonarhipov
3
150
Spec-Driven Development with AI Agents: From High-Level Requirements to Working Software
antonarhipov
3
180
Strengthening Immutability in Kotlin. A Glimpse into Valhalla
antonarhipov
3
120
Kotlin—the New and Noteworthy in 2.2
antonarhipov
1
58
Levels of AI-assisted programming
antonarhipov
0
180
Devoxx France 2024. Kotlin - the new and noteworthy
antonarhipov
2
120
Harnessing the power of AI in IntelliJ IDEA
antonarhipov
1
270
Other Decks in Technology
See All in Technology
When Does a Local Qwen Start to Break
morshoto
0
180
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
120
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
260
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
250
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
310
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
0
410
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
0
180
Bet AI Day 2026丨AIを「使う」から、AIが「働く」へ ― LayerXが進める「組織AI」の社会実装
layerx
PRO
3
2.7k
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
590
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
2
240
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
360
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
0
270
Featured
See All Featured
Navigating Team Friction
lara
192
16k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Ethics towards AI in product and experience design
skipperchong
2
360
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
920
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
340
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
How to build a perfect <img>
jonoalderson
1
6k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Transcript
Загрузчики классов в Java КОЛЛЕКЦИЯ ГРАБЛЕЙ
Докладчик Антон Архипов @antonarhipov
Что бы сделать JRebel, нам потребовалось …
Внедриться в процесс загрузки классов
Потребовалось … проинтегрировать решение со всевозможными*
серверами приложений (JBoss, Glassfish, итд) * -‐ На данный момент в тестовой среде установлено 60 разных версий серверов
и … решить 100500 проблем связанных с
загрузчиками классов
None
Полезное чтиво • Vijay Saraswat, Java is not type-‐
safe, 1997 • Sheng Liang and Gilad Bracha, Dynamic Class Loading in the Java Virtual Machine in Proc. of the ACM Conf. on Object-‐Oriented Programming, Systems, Languages and Applicaqons, October 1998.
План захвата галактики Основы загрузки классов Коллекция граблей
Как загрузчики «утекают»
None
public abstract class ClassLoader { public Class loadClass(String name) protected
Class defineClass(byte[] b) public URL getResource(String name) public Enumeration getResources(String name) public ClassLoader getParent() }
public class A { public void doSmth() { B b
= new B(); b.doSmthElse(); } } Эквивалентно A.class.getClassLoader().loadClass(“B”);
Модель делегирования У каждого загрузчика есть загрузчик-‐«родитель»
Загрузчик 1 Загрузчик 2
Модель делегирования «родитель» обычно опрашивается первым
позволяет избежать излишней загрузки классов Загрузчик 1 Загрузчик 2 МойКласс.class
Модель делегирования Загрузчик расширений Системный загрузчик Базовый
загрузчик Пользовательский загрузчик
Модель делегирования Загрузчик расширений Системный загрузчик Базовый
загрузчик Пользовательский загрузчик Пользовательский загрузчик Пользовательский загрузчик
Модель делегирования Сюрприз! В окружении Java
EE, загрузчик web-‐ модуля опрашивается первым
Модель делегирования На каждый WAR выделяется отдельный
загрузчик Позволяет изолировать приложения в рамках одного контейнера
Делегирование в Java EE
hƒp://docs.oracle.com/cd/ E19501-‐01/819-‐3659/beadf/index.html Sun Java System Applicaaon Server Pladorm
Ediaon 9 Developer's Guide
None
Класс не найден • Разновидности: ClassNotFoundExcepqon NoClassDefFoundError
• В помощь: Поиск в IDE (Ctrl+Shi•+T / Ctrl + N) find *.jar -‐exec jar -‐A '{}' \; | grep MyClass URLClassLoader.getUrls() Логи!
Найден, но не тот • Варианты: IncompaqbleClassChangeError
AbstractMethodError NoSuch(Method|Field)FoundError ClassCastExcepqon, IllegalAccessError • В помощь: -‐verbose:class ClassLoader.getResource() javap -‐private MyClass
Найдено более одного • Варианты: LinkageError (loader constraint
violaqon) ClassCastExcepqon, IllegalAccessError • В помощь -‐verbose:class ClassLoader.getResource()
Найдено более одного Util3 u = (Util3) Factory3.instanceUntyped(); Factory3.instanceUntyped();
new Util3()
None
Утечки в загрузчиках Статические поля Статические
поля Статические поля
Утечки в загрузчиках WebAppFactory WebAppFactory WebAppFactory
Leak Leak Leak
Запомнить! В случае решений проблем с загрузчиками
проверяйте свои гипотезы!
Запомнить! Чтобы произошла утечка загрузчика, достаточно утечки
одного объекта, класс которого был загружен через данный загрузчик.
Вопросы? • @antonarhipov •
[email protected]
• hƒp://www.jrebel.com