Загрузчики классов в Java - коллекция граблей

2,599 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,599
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
16
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Загрузчики классов в Java - коллекция граблей

  1. 1. Загрузчики  классов  в  Java  КОЛЛЕКЦИЯ  ГРАБЛЕЙ  
  2. 2. Докладчик  Антон  Архипов  @antonarhipov  
  3. 3. Что  бы  сделать  JRebel,  нам  потребовалось  …    Внедриться  в  процесс    загрузки  классов  
  4. 4. Потребовалось  …    проинтегрировать  решение    со  всевозможными*  серверами  приложений  (JBoss,  Glassfish,  итд)  *  -­‐  На  данный  момент  в  тестовой  среде  установлено  60  разных  версий  серверов  
  5. 5. и  …    решить  100500  проблем  связанных  с  загрузчиками  классов  
  6. 6. Полезное  чтиво  •  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.    
  7. 7. План  захвата  галактики  Основы  загрузки  классов  Коллекция  граблей  Как  загрузчики  «утекают»  
  8. 8. 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() }  
  9. 9. public class A { public void doSmth() { B b = new B(); b.doSmthElse(); } }  Эквивалентно  A.class.getClassLoader().loadClass(“B”);  
  10. 10. Модель  делегирования  У  каждого  загрузчика  есть  загрузчик-­‐«родитель»  Загрузчик  1  Загрузчик  2  
  11. 11. Модель  делегирования  «родитель»  обычно  опрашивается  первым    позволяет  избежать    излишней  загрузки    классов  Загрузчик  1  Загрузчик  2  МойКласс.class  
  12. 12. Модель  делегирования  Загрузчик  расширений  Системный  загрузчик  Базовый  загрузчик  Пользовательский  загрузчик  
  13. 13. Модель  делегирования  Загрузчик  расширений  Системный  загрузчик  Базовый  загрузчик  Пользовательский  загрузчик  Пользовательский  загрузчик  Пользовательский  загрузчик  
  14. 14. Модель  делегирования  Сюрприз!      В  окружении  Java  EE,  загрузчик  web-­‐модуля  опрашивается  первым  
  15. 15. Модель  делегирования    На  каждый  WAR  выделяется  отдельный  загрузчик    Позволяет  изолировать  приложения    в  рамках  одного  контейнера  
  16. 16. Делегирование  в  Java  EE  
  17. 17. hƒp://docs.oracle.com/cd/E19501-­‐01/819-­‐3659/beadf/index.html  Sun  Java  System  Applicaaon  Server  Pladorm    Ediaon  9  Developers  Guide  
  18. 18. Класс  не  найден  •  Разновидности:  ClassNotFoundExcepqon  NoClassDefFoundError  •  В  помощь:  Поиск  в  IDE  (Ctrl+Shi•+T  /  Ctrl  +  N)  find  *.jar  -­‐exec  jar  -­‐A  {}  ;  |  grep  MyClass  URLClassLoader.getUrls()  Логи!  
  19. 19. Найден,  но  не  тот  •  Варианты:  IncompaqbleClassChangeError  AbstractMethodError  NoSuch(Method|Field)FoundError  ClassCastExcepqon,  IllegalAccessError  •  В  помощь:  -­‐verbose:class  ClassLoader.getResource()  javap  -­‐private  MyClass  
  20. 20. Найдено  более  одного  •  Варианты:  LinkageError  (loader  constraint  violaqon)  ClassCastExcepqon,  IllegalAccessError  •  В  помощь  -­‐verbose:class  ClassLoader.getResource()  
  21. 21. Найдено  более  одного  Util3 u = (Util3) Factory3.instanceUntyped(); Factory3.instanceUntyped();  new Util3()  
  22. 22. Утечки  в  загрузчиках  Статические  поля  Статические  поля  Статические  поля  
  23. 23. Утечки  в  загрузчиках  WebAppFactory   WebAppFactory   WebAppFactory  Leak   Leak   Leak  
  24. 24. Запомнить!    В  случае  решений  проблем  с  загрузчиками  проверяйте  свои  гипотезы!    
  25. 25. Запомнить!  Чтобы  произошла  утечка  загрузчика,  достаточно  утечки  одного  объекта,  класс  которого  был  загружен  через  данный  загрузчик.  
  26. 26. Вопросы?  • @antonarhipov  • anton@zeroturnaround.com  • hƒp://www.jrebel.com    

×