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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Anton Arhipov
April 24, 2013
Technology
570
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
590
Spec-Driven Development with AI Agents (Workshop, May 2026)
antonarhipov
4
520
Spec-Driven Development with AI Agents. Java Day Istanbul 2026
antonarhipov
3
140
Spec-Driven Development with AI Agents: From High-Level Requirements to Working Software
antonarhipov
3
150
Strengthening Immutability in Kotlin. A Glimpse into Valhalla
antonarhipov
3
110
Kotlin—the New and Noteworthy in 2.2
antonarhipov
1
50
Levels of AI-assisted programming
antonarhipov
0
160
Devoxx France 2024. Kotlin - the new and noteworthy
antonarhipov
2
110
Harnessing the power of AI in IntelliJ IDEA
antonarhipov
1
260
Other Decks in Technology
See All in Technology
JAWS_ICEBERG_BASECAMP
iqbocchi
2
110
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
3
870
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
2
850
VPCセキュリティ対応の最新事情
nagisa53
1
320
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
170
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
3
540
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
630
どこまでAIに任せるか 〜確率論と決定論の境界決定〜
shukob
0
500
AI Agent を本番環境へ―― Microsoft Foundry × Azure Serverless で作る Enterprise-Ready な基盤
shibayan
PRO
0
110
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
280
穢れた技術選定について
watany
19
6.2k
「顧客の声を聞かなければ何も始まらない」 ── 顧客の声から生まれた『AI返信補助機能』の開発プロセス / AICon2026_shikata_imai
rakus_dev
1
270
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.1k
What's in a price? How to price your products and services
michaelherold
247
13k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
230
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.8k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
470
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Visualization
eitanlees
152
17k
Being A Developer After 40
akosma
91
590k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
460
Fireside Chat
paigeccino
42
4k
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