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
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
57
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
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
200
Amazon Bedrock Knowledge Basesチャンキング解説!
aoinoguchi
0
160
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
770
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
400
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
220
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
190
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
130
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
610
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
170
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
200
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
How to build a perfect <img>
jonoalderson
1
4.9k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
37k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
130
GitHub's CSS Performance
jonrohan
1032
470k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
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