上次有朋友提到可以自己做一个class loader,不知道因该怎么“自己做一个”呢?现在就是希望程序能输出所有运行时候被使用/加载的class。谢谢大家,大家中秋快乐。

解决方案 »

  1.   

    刚和老板谈话,老板说自己做一个class loader的话可能会和某些第三方库中已经存在的私有的class loadere冲突。唉.....
      

  2.   

    简单说点自己的认识吧:
    类的加载采用父亲委托机制,防止用户自定义加载器加载非法类。反之所有自定义加载器都继承了ClassLoader。
    每个类加载器都有各自命名空间,JVM对不同命名空间的类的相互可见性做了限制,为了保证不同命名空间的类即使完整类名字相同情况也不发生冲突。为了禁止自定义类访问核心类库中的成员,JVM还采用了运行时包的机制,加强对包可见成员保护。
      

  3.   

    打错个字
    反 正 所有自定义加载器都继承了ClassLoader。
      

  4.   

    1:javac Hello.java
    2:java -verbose Hello  可以显示运行中加载的所有类
      

  5.   

    做好了,现在测试中。我首先用hahapigflying上面的方法,通过jvm得到那些classes被调用。然后写一个程序检查jar里面的所有class文件,如果这个文件没有被使用,就删除掉。本来我的jar包压缩以后9M大,现在只有3.5M了。我们的项目是要把这个Java程序放到一个flash上的,而不凑巧的是flash只有8M空间了,而且开发中的软件体积还会变大。如果我不这么做,去掉所有无用的class,我们一个设备要多几十美元的成本,用在更大的flash上。对于普通java程序,不推荐大家这么做。分数已经都给hahapigflying了。谢谢hahapigflying的帮助。