• Like
Загрузчики классов в Java - коллекция граблей
Upcoming SlideShare
Loading in...5
×

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

  • 1,702 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,702
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
5
Comments
0
Likes
3

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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