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
Anton Arhipov
April 24, 2013
Technology
1
560
Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблей
Anton Arhipov
April 24, 2013
Tweet
Share
More Decks by Anton Arhipov
See All by Anton Arhipov
Strengthening Immutability in Kotlin. A Glimpse into Valhalla
antonarhipov
2
56
Kotlin—the New and Noteworthy in 2.2
antonarhipov
1
24
Levels of AI-assisted programming
antonarhipov
0
87
Devoxx France 2024. Kotlin - the new and noteworthy
antonarhipov
2
79
Harnessing the power of AI in IntelliJ IDEA
antonarhipov
1
210
VirtualJUG: Kotlin 2.0 and beyond
antonarhipov
1
140
Kotlin 2.1: Language Updates
antonarhipov
3
180
Devoxx Belgium 2024 - Kotlin 2.0 and beyond
antonarhipov
2
180
Data Analysis with Kotlin Notebook, DataFrame, and Kandy
antonarhipov
1
120
Other Decks in Technology
See All in Technology
Agile Leadership Summit Keynote 2026
m_seki
1
670
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
260
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
610
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
AIが実装する時代、人間は仕様と検証を設計する
gotalab555
1
290
Amazon Bedrock Knowledge Basesチャンキング解説!
aoinoguchi
0
160
マネージャー視点で考えるプロダクトエンジニアの評価 / Evaluating Product Engineers from a Manager's Perspective
hiro_torii
0
180
Greatest Disaster Hits in Web Performance
guaca
0
290
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.4k
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
Tebiki Engineering Team Deck
tebiki
0
24k
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
440
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
How to make the Groovebox
asonas
2
1.9k
エンジニアに許された特別な時間の終わり
watany
106
230k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
How to Think Like a Performance Engineer
csswizardry
28
2.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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