Classloader的若干问题

1.自定义的classloader有哪些应用?
我认为一个是热部署、另一个是加密、请问,在实际应用当中还有什么其他的用法么?
2.热部署应该怎么用?
是应该重写loadClass()绕过findLoadedClass()检测?
还是说应该重写findClass()在需要重新部署的时候直接new一个新的自定义classloader然后在部署?
阅读更多

关于ClassLoader和Garbage Collection的若干问题

07-16

1.在资料上看到说rn "在JDK1.2 及以后的版本里,升阳公司又收紧了类的垃圾回收规则,它规定,rn所有通过局部的和系统的类加载器加载的类,永不被回收。并且,通过其它类加载rn器加载的类,只有在加载器自己被回收后才可被回收。"rnrna.局部的类加载器,系统的类加载器,其它类加载器这三者如何科学地定义区分呢?rnrnb.请问真的象上面的话说的这样吗?rnrnrn2.资料上又说rn "如果不了解这一版爪哇语言的特点,很有可能会遇到类消失掉的奇特问题(ClassNotFoundException)。为了使你的单态类能在所有版本的爪哇环境里使用,作者特别提供一个"看守"类程序,它能保证你的单态类, 甚至其它任何对象,一旦交给"看守"对象,即不会莫名其妙地被垃圾回收器回收,直到你把它从"看守" 那里把它释放出来。"rnrn代码清单6. 看守类的一个实现。rnpackage com.javapatterns.singleton.demos;rnimport java.util.Vector;rn/**rn* This class keeps your objects from garbage collectedrn*/rnpublic class ObjectKeeper extends Threadrnrnprivate ObjectKeeper()rnrnnew Thread(this).start();rnpublic void run()rnrntryrnrnjoin();rnrncatch (InterruptedException e) rnrn/**rn* Any object passed here will be kept until you call discardObject()rn*/rnpublic static void keepObject(Object myObject)rnrnSystem.out.println(" Total number of kept objects: " +rnm_keptObjects.size());rnm_keptObjects.add(myObject);rnSystem.out.println(" Total number of kept objects: " +rnm_keptObjects.size());rnrn/**rn* This method will remove the protect of the object you pass in and make itrn* available for Garbage Collector to collect.rn*/rnpublic static void discardObject(Object myObject)rnrnSystem.out.println(" Total number of kept objects: " +rnm_keptObjects.size());rnm_keptObjects.remove(myObject);rnSystem.out.println(" Total number of kept objects: " +rnm_keptObjects.size());rnrnprivate static ObjectKeeper m_keeper = new ObjectKeeper();rnprivate static Vector m_keptObjects = new Vector();rnrn看守类应当自我实例化,而且在每个系统里只需一个实例。这就意味着看守rn类本身就应当是单态类。当然,类消失的事情绝不可以发生在它自己身上。作者rn提供的例子刚好满足所有的要求。rnrnrnc. 上面的例子为什么能保证类不被回收呢?rnrnd. 为什么说"类消失的事情绝不可以发生在它自己身上"呢?

换一批

没有更多推荐了,返回首页