虽然gc会在适当的时候自动回收内存,但是我们不知道gc何时自动回收,因此为了使jvm的内存有合理的分配和调度,我们某些时候需要去手动释放内存,将不用的字符串指向null,释放他们占有的内存空间!jvm对内存的分配应该有控制!

解决方案 »

  1.   

    具体有什么方法不知道,不过同意楼上的观点,可以自己setUp(),tearDown(),就是说在setUp()里设置初始的各个变量,对象等。当程序运行完成,执行tearDown(),tearDown()里面是清除各个变量,对象等。这2个方法是在JUnit里被使用的。值得参考。
      

  2.   

    OutOfMemoryError
    死循环 …… ^^
      

  3.   

    解决OutOfMemoryError的办法只有2个
    一是升级
    二是改善程序算法
      

  4.   

    内存有泄漏.用Optimizeit工具查一下.
      

  5.   

    也有可能频繁打开了一些资源,没用了却没有释放,GC对没有释放的资源是不会垃圾收集的。
    比如数据库链接,ResultSet等。
      

  6.   

    这个首先检查你的代码是不是没有问题
    如果不是死循环造成的,就使用下面的命令增加虚拟机内存
    java -Xms8888k -Xmx8888k XXX
    这两个参数大小最好设置成一样的
      

  7.   

    两种可能性,一种是内存泄漏,另一种是企图把超过JVM堆的数据载入JVM,比如你用DOM方式去读一个200M的XML这个肯定会出现这个错误。
      

  8.   

    java垃圾清除机制是有自己的判断算法的.被回收的对象必需是没有任何引用的例如Strnig c="asdfasdf";
    c="aaaa";//此时"asdfasdf"没有任何引用指向,所以将来会被回收
      

  9.   

    通常发生在堆中没有足够空间用于新对象的存放.
    不妨先做一下完整的垃圾清理,
    public static void fullGC(){
    Runtime rt = Runtime.getRuntime();
    long isFree = rt.freeMemory();
    long wasFree ;
    do{
      wasFree = isFree;
      rt.runFinalization();
      rt.gc();
      isFree = rt.freeMemory();
    }while(isFree > wasFree);
    }
    ( 代码抄于java编程语言)
      

  10.   

    JVM规范并没有规定堆的初始大小是多少以及是否可扩展,具体都由虚拟机实现者决定.
      

  11.   

    结贴!
    程序本身也考虑了优化的措施
    但数据量的确太大,矛盾好像无法解决
    有好的方案的DX可以email给我 [email protected],高分重谢