OutOfMemoryError,究竟是怎么回事?大侠帮忙(急急急) 1、加内存2、分段读,不要一次全读出来放到Vector,可以1000行读一次 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java -mx256m aaa.jar如果在 JBuilder里面只需要在VM参数里面加上 -mx256m 指定需要的 内存大小 加内存并不能够解决问题 ,需要知道的是你的JAVA虚拟机能够使用的内存只有默认的16M,只需要在启动程序的时候增加参数就可以了 。当然程序的优化是应该放在第一位考虑的 。 谢谢大家的建议。但是我必须将所有记录全读进,然后进行预处理(记录相关联并相互制约)。我还相问大家:Vector中分配内存是根据每个插进的Element的大小分配的吗?但是我发现如果我插入20万条记录,每条记录的大小不会超过100字节,但是为什么任务管理器中java.exe消耗内存达到上100M?请高手指教。 to phoenixXia(斐然)Vector中分配内存是根据每个插进的Element的大小分配的吗?理论上应该是的,你可以 参考一下Vector的源码。每次 add的时候,如果空间不够,而又没有指定 increacementCount的话,就会将Vector的容量变成2倍所以,所以,如果刚才50M不够,仅仅Vector就会变成100M了。Vector是一个很老的容器类,可以考虑使用ArrayList等。 同意teva(用正确的理论引导人)的提议,如果你不是在多线程下使用Vector建议使用ArrayList代替 我使用的大容量的Vector都指定了initCapacity和increCapacity。并且我知道Vector是同步的,由于我的程序涉及多线程,所以我选择了Vector.如果使用ArrayList性能能有很大提高的话,我到乐意试试。 如果程序,非得用超过80M的内存,可以用:java -mx512m yourProj.jar(因为jvm默认的内存是64M)如果是程序上的问题,可以优化一下! 一般-mx 后面带的参数为物理内存的一半。我不知道在物理内存只有256m的情况下,指定-mx512m是什么后果? 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(斐然),其实我对于线程安全要不是你这么问还不会看这么多呢。 java如何传递泛型参数 请问以下代码应该怎么调呀?rs.close()那里报错 超级简单的日期转换问题,达人帮忙啊 如何设置系统变量才可以在任何目录下都引用自定义包 请教一java程序 请高手解答,关于事件传递的问题?谢谢各位指教! 请问,怎样将字符串转换成为数组 事不是真的能一次编写,到处运行? JTable的刷新问题! 如何在applet做成的对话框中加上一个超级连接 请问application中如何浏览一个网页!(本地、远程) 请教有关继承,多态和初始化问题
我还相问大家:Vector中分配内存是根据每个插进的Element的大小分配的吗?但是我发现如果我插入20万条记录,每条记录的大小不会超过100字节,但是为什么任务管理器中java.exe消耗内存达到上100M?
请高手指教。
理论上应该是的,你可以 参考一下Vector的源码。每次 add的时候,如果空间不够,而又没有指定 increacementCount的话,就会将Vector的容量变成2倍所以,所以,如果刚才50M不够,仅仅Vector就会变成100M了。
Vector是一个很老的容器类,可以考虑使用ArrayList等。
java -mx512m yourProj.jar(因为jvm默认的内存是64M)
如果是程序上的问题,可以优化一下!
关于内存,其实是JVM可以使用的内存,你想一下系统可能只有256M内存那么你的Windows任务管理器里面是不是显示多于256M的内存呢?系统会给予程序“好像”多于实际物理内存的 内存使用。这个其实是系统的虚拟内存,应用程序可以不考虑,你指定512M也是可以的。关于线程安全性:
线程安全是指在使用多线程访问的时候要小心的处理,避免同时访问造成问题。那么Vector是同步的,这种理解有没有问题呢?
其实“线程安全的类”是有级别的 。
第一级 :immutable(非可变),这种类对于客户(使用者)来讲是不变的,不需要外部同步。
第二级:thread-safe,这个类的实例是可变的 ,但是,该类的所有方法包含足够的同步,不需要外部同步。例子有Ramdon,java。util。timer。
第三级:conditional thread-safe,只需要对于有限的方法调用使用外部同步。如Hashtable和Vector,需要在调用Iterator的时候进行同步。
第四级:thread-compatible,每一个方法调用的外部需要进行同步,实例就是集合的实现,包括ArrayList和HaspMap。呵呵,phoenixXia(斐然),其实我对于线程安全要不是你这么问还不会看这么多呢。