本帖最后由 sling2007 于 2011-03-08 22:56:24 编辑

解决方案 »

  1.   

    你去看看Class.forName()的源代码吧,肯定可以帮你解决问题。
      

  2.   

    1、回收机制只回收new产生的堆内存吗?2、存放引用和基本类型的栈内存怎么回收呢?存放static变量的是什么内存,怎么回收?3、如果不考虑多参的构造方法问题,关键字new和Class.forname().instance是不是一样的呢?不只是效果上,从底层执行顺序上也一样。1.回收机制是回收堆中的
    2.栈里的东西在方法执行完毕就弹栈了,也就是销毁了;static变量是属于类成员,在堆中,从方法内部不能声明static成员就可以看出。
    3.不是太了解,等高人回答
      

  3.   

    JAVA 的回收机制有很多,不同的系统可能采用不同的。而且随着JDK的版本升级,机制也会更新,目前1.6以上貌似差别就不是很大了.  GC/G1   GC又有很多(并行,串行等..)   回收他有先后   回收区有 3个  新生代,旧生代,还有个固定区(应该是的) 他好像是根据检查条件检索对象的存在关系并划入不同的区然后回收,回收有2种 名字不是太清楚了 总之就是内存足够久部分回收,否则全部回收.CLASS.forname 好像是返回已存在对象吧?如果不存在才重新创建? new 就是直接分配了吧..拙见,有错误还请不要喷我,,,,, 比较长时间没看JAVA了   
      

  4.   

    有本书叫  JAVA分布式开发  里面有比较详细的  内存分配及回收机制 的讲解 另外对并发包的讲解以及大型业务系统的 高效管理的讲解也不错  你可去去看看    作者是  淘宝网 的首席架构师
      

  5.   

    1、回收机制只回收new产生的堆内存吗?
    这句话是不对的,什么反序列化的来的对象等等都可以被回收2、存放引用和基本类型的栈内存怎么回收呢?存放static变量的是什么内存,怎么回收?
    栈,里面存放的是帧,调用一个方法的时候创建一个帧,入栈,方法调用结束,帧出栈,自动丢弃static变量存在方法区,它与类相关,这个类被回收的时候才一同回收static变量3、如果不考虑多参的构造方法问题,关键字new和Class.forname().instance是不是一样的呢?不只是效果上,从底层执行顺序上也一样。
    因为书中的意思是java只回收new的内存,那么class.forname的内存是不是不回收呢?(请从new和class.forName的不同之处这里来解释)
    说到forName,要先说一下类的加载情况,分三个阶段:装载-连接(连接分为验证-准备-解析)-初始化,forName有两个重载的方法,带一个参数的表示会初始化类,即会初始化类中的静态变量,会调用static块
    还有一个forName可以指定是否初始化,如果需要加载的类以前没有被加载,则装载类后可以不初始化。如果需要装载的类已经在内存中且初始化了,则传false进去也是没用的
    newInstance就是调用无参的构造方法,跟直接new无参的构造方法是一样一样的
    ps:《java编程思想》这本书个人认为并不是一本怎么样的书,它只会搞的你云里雾里,因为它比常规书稍微深入一点,但在原理的解释上面又非常含糊。不伦不类要理解更深入就看《深入java虚拟机》第二版,《jvm spec》second edition,看了这个,你会发现《java编程思想》纯属浮云