我的代码片段如下:
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
//PrintWriter out = new PrintWriter(fileName);
//FileOutputStream out = new FileOutputStream(fileName); while (rs.next()) {
for (int j = 1; j <= totalColumn; j++) {
out.write(rs.getObject(j).toString());
out.write("\t");
}
out.write("\n");
out.flush(); }
}
我在代码中 写了 out.flush()用来刷新该流的缓冲; 可是当我的记录数超过3W时就报了内存益处的问题了,难道JAVA不能边读边写吗?还是out这个对象随着指向的fileName文件的边大占用内存也大了吗??到底怎么来实现用JAVA写更多的数据而不内存益处呢?请高手指点:)
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
//PrintWriter out = new PrintWriter(fileName);
//FileOutputStream out = new FileOutputStream(fileName); while (rs.next()) {
for (int j = 1; j <= totalColumn; j++) {
out.write(rs.getObject(j).toString());
out.write("\t");
}
out.write("\n");
out.flush(); }
}
我在代码中 写了 out.flush()用来刷新该流的缓冲; 可是当我的记录数超过3W时就报了内存益处的问题了,难道JAVA不能边读边写吗?还是out这个对象随着指向的fileName文件的边大占用内存也大了吗??到底怎么来实现用JAVA写更多的数据而不内存益处呢?请高手指点:)
解决方案 »
- 求高手帮我看看这个登录界面的代码
- 【向ZangXT等大侠提问】关于创建String新对象问题的8种情况
- java.net.SocketException: Connection reset错误
- 通迅问题
- 一个关于main方法的问题,请高手解释一下
- 今天突然发现!...........................
- 很菜问题,很容易得分!
- 日期转换的问题,请各位帮忙!
- 在线急等!!!在java中如何实现进制转换???
- Java中关于集合存储和取出数组的问题?
- 如何将一个16位无符号整数转化为字符.如3427转化为'哦' ,在线等待、
- 有个北软教育培训的,在方圆大厦7层,大哥大姐们,您们有培训过的吗?感觉怎么样呀
用java操作电子表格,用的是jxl的包,有时候不稳定,操作的时候出现内存益处。
我一开始也这么怀疑数据有问题,但是改写为如下:
for (int j = 1; j <= totalColumn; j++) {
out.write("12345");
out.write("\t");
}
问题还是一样啊。to laoxing521(想做程序员的农民)
我把 out.flush() 放到for里面可是还是内存益出啊,哪位能来帮我解决这个问题啊?help!!!!!!!!!!!!!!!!!!
但也没有内存溢出呀,再找找,问题可能出在别的地方import java.io.*;public class Demo{
public static void main(String [] args) throws IOException{
String s = "";
for(int i=0; i<10000; i++){
s+="abcdefg";
}
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("c:/log/test.txt")));
for(int i=0; i<1000000; i++){
out.write(s);
out.write("\r\n");
if(i%500==0)
System.out.println("己写入 " + i +"行");
}
out.flush();
out.close();
}
}
1条记录算他20个字符
那么
(20*16*30000)/65536=146m
默认的JAVA命令的-xmx 是占用内存的1/4
估计老兄内存也就512M不过我觉得问题不在这里用BufferedWriter的用意是8192个char写一次
调用的是sun.nio.cs.StreamEncoder
StreamEncoder的源码没有开放,不过估计写的很糟糕 估计是垃圾释放的问题
sun的isv上有说
在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
所以我认为这种情况下才有了BufferedWriter(ps:class write是缓存大小是1024个char)
用来减少释放的频率解决方法:
重新扩展Writer的内容,但是具体内容可以模仿BufferedWriter
但是defaultCharBufferSize要定义的大点