1、加内存
2、分段读,不要一次全读出来放到Vector,可以1000行读一次

解决方案 »

  1.   

    java -mx256m aaa.jar如果在 JBuilder里面只需要在VM参数里面加上 -mx256m  指定需要的 内存大小
      

  2.   

    加内存并不能够解决问题 ,需要知道的是你的JAVA虚拟机能够使用的内存只有默认的16M,只需要在启动程序的时候增加参数就可以了 。当然程序的优化是应该放在第一位考虑的 。
      

  3.   

    谢谢大家的建议。但是我必须将所有记录全读进,然后进行预处理(记录相关联并相互制约)。
    我还相问大家:Vector中分配内存是根据每个插进的Element的大小分配的吗?但是我发现如果我插入20万条记录,每条记录的大小不会超过100字节,但是为什么任务管理器中java.exe消耗内存达到上100M?
    请高手指教。
      

  4.   

    to phoenixXia(斐然)Vector中分配内存是根据每个插进的Element的大小分配的吗?
    理论上应该是的,你可以 参考一下Vector的源码。每次 add的时候,如果空间不够,而又没有指定 increacementCount的话,就会将Vector的容量变成2倍所以,所以,如果刚才50M不够,仅仅Vector就会变成100M了。
    Vector是一个很老的容器类,可以考虑使用ArrayList等。
      

  5.   

    同意teva(用正确的理论引导人)的提议,如果你不是在多线程下使用Vector建议使用ArrayList代替
      

  6.   

    我使用的大容量的Vector都指定了initCapacity和increCapacity。并且我知道Vector是同步的,由于我的程序涉及多线程,所以我选择了Vector.如果使用ArrayList性能能有很大提高的话,我到乐意试试。
      

  7.   

    如果程序,非得用超过80M的内存,可以用:
    java -mx512m yourProj.jar(因为jvm默认的内存是64M)
    如果是程序上的问题,可以优化一下!
      

  8.   

    一般-mx 后面带的参数为物理内存的一半。我不知道在物理内存只有256m的情况下,指定-mx512m是什么后果?
      

  9.   

    phoenixXia(斐然)
    关于内存,其实是JVM可以使用的内存,你想一下系统可能只有256M内存那么你的Windows任务管理器里面是不是显示多于256M的内存呢?系统会给予程序“好像”多于实际物理内存的 内存使用。这个其实是系统的虚拟内存,应用程序可以不考虑,你指定512M也是可以的。关于线程安全性:
    线程安全是指在使用多线程访问的时候要小心的处理,避免同时访问造成问题。那么Vector是同步的,这种理解有没有问题呢?
    其实“线程安全的类”是有级别的 。
    第一级 :immutable(非可变),这种类对于客户(使用者)来讲是不变的,不需要外部同步。
    第二级:thread-safe,这个类的实例是可变的 ,但是,该类的所有方法包含足够的同步,不需要外部同步。例子有Ramdon,java。util。timer。
    第三级:conditional thread-safe,只需要对于有限的方法调用使用外部同步。如Hashtable和Vector,需要在调用Iterator的时候进行同步。
    第四级:thread-compatible,每一个方法调用的外部需要进行同步,实例就是集合的实现,包括ArrayList和HaspMap。呵呵,phoenixXia(斐然),其实我对于线程安全要不是你这么问还不会看这么多呢。