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
21
Levels of AI-assisted programming
antonarhipov
0
57
Devoxx France 2024. Kotlin - the new and noteworthy
antonarhipov
2
40
Harnessing the power of AI in IntelliJ IDEA
antonarhipov
1
170
VirtualJUG: Kotlin 2.0 and beyond
antonarhipov
1
120
Kotlin 2.1: Language Updates
antonarhipov
3
140
Devoxx Belgium 2024 - Kotlin 2.0 and beyond
antonarhipov
2
170
Data Analysis with Kotlin Notebook, DataFrame, and Kandy
antonarhipov
1
87
Kotlin 2.0 and Beyond
antonarhipov
2
250
Other Decks in Technology
See All in Technology
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
250
allow_retry と Arel.sql / allow_retry and Arel.sql
euglena1215
1
160
Agile PBL at New Grads Trainings
kawaguti
PRO
1
420
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
280
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
240
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
170
2025年になってもまだMySQLが好き
yoku0825
8
4.7k
ハードウェアとソフトウェアをつなぐ全てを内製している企業の E2E テストの作り方 / How to create E2E tests for a company that builds everything connecting hardware and software in-house
bitkey
PRO
1
130
20250903_1つのAWSアカウントに複数システムがある環境におけるアクセス制御をABACで実現.pdf
yhana
3
550
エラーとアクセシビリティ
schktjm
1
1.2k
roppongirb_20250911
igaiga
1
220
研究開発と製品開発、両利きのロボティクス
youtalk
1
520
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Making Projects Easy
brettharned
117
6.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Being A Developer After 40
akosma
90
590k
Raft: Consensus for Rubyists
vanstee
140
7.1k
GraphQLとの向き合い方2022年版
quramy
49
14k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
How to train your dragon (web standard)
notwaldorf
96
6.2k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Code Review Best Practice
trishagee
70
19k
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