출처 : 
http://blogs.sun.com/CoreJavaTechTips/entry/closing_a_urlclassloader
http://blog.sdnkorea.com/blog/770

자바의 클래스 로더의 약점은 바로 cloassloader였다. 이 녀석들이 클래스 파일을 읽어서 객체로 인스턴스화하고, null이 되어 garbagec collector에 의해서 gc되기 전까지는 이름은 같은데, 다른 인스턴스에 대해서 로딩을 할 때 문제가 생기는 문제가 있었다.

이를 해결하기 위해서는  즉 객체와 연결이 끝나게 하는 Kill 또는 Dispose, Disconnect 같은 것이 필요했는데. 다행히 이번 jdk7에서부터 추가된다고 한다. 전부 다는 아니지만. URLClassLoader에 의해서 지원한다고 하니 좋은 소식이다.
즉, URLClassLoader를 close메소드를 호출하여 null 로 하고, 또다른 URLClassLoader를 이용해서 다른 클래스 로딩을 할 수 있기 때문에. 훨씬 모듈 프로그래밍에 획기적인 개발이 되지 않을 까 싶다.

URL ClassLoader는 다음의 리소스들을 지원한다. 모듈 프로그래밍이 정말 편해지게 될 것이라 생각된다.
  • file: (loads from file-system directories)
  • jar: (loads from JAR files)
  • http: (loads from http servers)

샘플 소스가 이를 말해준다!!! 모듈 프로그래밍이 잼나겠다. 다만.. jdk을 쓰지 못하는 임베디드쪽 자바는 힘들뿐~~ 
       // foo.jar 모듈을 읽는다.
       URL url = new URL("file:foo.jar");
       URLClassLoader loader = new URLClassLoader (new URL[] {url});
       Class cl = Class.forName ("Foo", true, loader);
       Runnable foo = (Runnable) cl.newInstance();
       foo.run();
       loader.close ();

       // foo.jar gets updated somehow

       loader = new URLClassLoader (new URL[] {url});
       cl = Class.forName ("Foo", true, loader);
       foo = (Runnable) cl.newInstance();
       // run the new implementation of Foo
       foo.run();






'java core' 카테고리의 다른 글

JavaOne 2008  (0) 2009.04.17
addShutdownHook() of Runtime class  (0) 2009.04.17
JMX 에서 standardbean 사용 관련 Tip  (0) 2009.03.28
JMX를 통해서 cpu 정보 구하기  (0) 2009.03.25
Java Memory 이야기  (0) 2009.03.25
Posted by '김용환'
,