我写了一个程序,里面用到了多线程,开始时使用了静态变量Hashtable,运行的时候报错提示内存溢出,后来将静态的Hashtable改为动态数据,并在程序结束后进行回收空间,使用了System.gc(),并且将Hashtable使用clear方法进行清除,而且将java虚拟内存扩大到512M,结果都是运行到相同的地方就会报溢出。
请问还有什么方法可以解决内存溢出的问题?谢谢!
在线等,急用

解决方案 »

  1.   

    System.gc后你执行Thread.sleep(2000),等待虚拟机有时间释放内存。如果还是内存溢出那就是说明你分配的内存不足于装下你的数据。
      

  2.   

    不明白你为什么要使用Hashtable,如果你需要获取还在活动中的线程你可以使用ThreadGroup,在你的线程构造函数中传入一个ThreadGroup,你所有线程都属于它如果需要访问你可以调用ThreadGroup.activeCount和enumerate方法列举出来
      

  3.   

    首先你检查一下(进行调试)是否发生了死循环
    如果没有
    你可以 java   -Xmx这个参数设置最大stack内存大小解决内存溢出最好的方法就是加大内存.....
    或者你可以借助外存来扩大你的内存...不过算法比较麻烦
      

  4.   

    谢谢楼上的各位,在程序中使用hashtable是为了保存运行中的一些结果,而且程序中没有形成死循环,并且也已经将虚拟内存设成最大值但是都还是没有结果。现在感觉搞不清楚是什么地方导致的内存泄露。
      

  5.   

    我把java虚拟机的内存分配到1G了,还是不可以,但是感觉实际过程中并没有那么多数据
      

  6.   

    System.gc后你执行Thread.sleep(2000),等待虚拟机有时间释放内存。
    这种方法也不可行呢
      

  7.   

    HashTable的数据量大吗?程序运行有严格的时间要求吗?如果没有,你可以用List来替换HashTable
      

  8.   

    我试了一下,感觉并不是Hashtable的问题,我先试一下改成list。谢谢!
      

  9.   

    应该有内存泄露,用jprofiler测一下
      

  10.   

    报的是StackOverflowError还是OutOfMemeryException