2010년 8월 26일 목요일

java classloader 동작 방식

[ClassLoader 의  loading 되는 순서]

 
  1. bootstrap classloader ( JVM 실행시 실행되어 Object class 를 로딩함)
  2. system classloader
  3. common classloader
  4. application classloader (어플리케이션 단위로 클래스 로더가 생성됨 -> 따라서 어플리케이션사이에 클래스 공유를 안함)
  5. jspfile classloader (JSP 파일마다 하나씩 생성)

[ClassLoader 의 호출관계]

Class가 필요한 경우 자신이 속한 ClassLoader 에게 Class를 호출하게 된다.
그런 경우 ClassLoader는 자신의 부모(상위) ClassLoader에게 해당 클래스를 가지고 있는지 확인 한다.
만약 부모 ClassLoader에도 해당 클래스가 없다면 system ClassLoader 까지 호출이 올라 가게된다.
System ClassLoader 에게도 해당 클래스가 없는경우 자신의 범위에 있는 Class Path 에서 해당 Class가 있는지 확인하고 있으면 Loading 하고 클래스를 리턴한다.
만약 자신의 범위의 해당 Class가 없으면 ClassNotFoundException을 발생시킨다.
부모에게서 ClassNotFoundException 을 받은경우 자신의 범위의 Class Path 에서 해당 클래스가 있는지 확인을 하게 된다.
이런 방식으로 처음 요청한 ClassLoader 까지 돌아 오게 된다.


[WebLogic의 Class 찾는 순서]
  1. Domain 폴더의 lib 폴더 (  CLASSPATH 환경변수)
  2. WEB-INF/classes
  3. WEB-INF/lib

댓글 없음:

댓글 쓰기