你设置-Xmx1024m是设置的java堆内存的大小,但是堆内存也分为很多块,你的用意是要缓存在内存当中,那么很明显这些对象都将会进入老年代。一办JVM的新生代与老年代的比例差不多应该是8:3。当然这个参数不同的虚拟机有不同是的比例。而且jvm中肯定也会有其他的对象。你试着将JVM继续扩大吧。当然这个也只是我的看法而已。

解决方案 »

  1.   

    设置的是eclipse的内存还是run configration那里设置的内存?
      

  2.   

    我在debug onfigration里面设置的,有区别?现在有个新问题,我电脑是3G的内存,-Xmx我只能设置到1600M,设置1600M以上就会提示Could not reserve enough space for object heap,可明明还有近800M的内存可以用
      

  3.   

    我3G的内存,扩大到1600M就提示Could not reserve enough space for object heap
      

  4.   

    你用-Xmn来调整一下老年代大小试试,
      

  5.   

    在eclipse的Run--Debug configration--Arguments
      

  6.   

    一个300M的文件,我空置着2.3G的内存,居然不能读进去,忘了说一点,为了提高读入内存之后的查询效率我是用hashmap存的
      

  7.   

    -Xms1024 保证启动后heap超过1024
    并且你还不能用sun的jdk sun的jvm会heap分带的(要么你把eden区设置的大于350M)你一定要读入300M这种做法需求上已经不对了...
    这种处理要么用64位jdk 要么用c来完成
      

  8.   

    最佳办法 是用缓存多次读取。 我有解决办法。 500M文件读取测试通过了。地址:
    http://download.csdn.net/detail/yjflinchong/4093746  java一次性查询处理几百万数据解决方法
      

  9.   

    Java数据在内存中以对象形式存放,要比文件中的字节形式大得多,内存使用效率很低,如果数据主要由大量长度很小的字串构成,经常会大出四五倍,1G内存读不进360M文件完全正常。这种情况除了加大物理内存外,也只能改变算法,使用流式边读入边处理的办法,只是这类程序写起来都很麻烦,集算器内置了这种流式游标计算方法,可以和Java无缝集成,方便很多。