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 |