首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

ObjectOutputStream java.lang.OutOfMemoryError: Java heap space,该如何处理

2012-02-28 
ObjectOutputStream java.lang.OutOfMemoryError: Java heap space如JAVA APIFileOutputStream fos new

ObjectOutputStream java.lang.OutOfMemoryError: Java heap space
如JAVA API
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeInt(12345);
oos.writeObject("Today");
oos.writeObject(new Date());

oos.close();

我按照上面的方法Write object

但是收到的是:
java.lang.OutOfMemoryError: Java heap sapce
下面的是我的代码。

我写的对象挺大的,当异常出现时,本地写了一个40MB+的文件,

对于这个问题,大家有没有什么解决方法?

对于这种特大的文件,一般的处理方法是什么?

Java code
public static boolean WriteObject(Object object,String filename){        System.gc();        if(object instanceof Serializable){            FileOutputStream fos;            try {                fos = new FileOutputStream(filename);            } catch (FileNotFoundException e1) {                System.err.println("Can not find file:"+filename+".");                        return false;            }            ObjectOutputStream oos;            try {                oos = new ObjectOutputStream(fos);                                oos.writeObject(object);                        oos.close();            } catch (IOException e) {                e.printStackTrace();                System.err.println("Can not write object:"+filename+".");                    return false;            }            return true;        }        else{            System.err.println("Object "+ object.getClass()+" can not be save.");            return false;        }    }


[解决办法]
可能是你的类没有正确实现序列化
[解决办法]
你可以在外围套个BufferedWriter试试:
oos = new ObjectOutputStream(fos);
------>
oos=new ObjectOutputStream(new BufferedOutputStream(fos));

不知道行不行,试试吧
[解决办法]
。。。虚拟机默认好像是。。。64M。。。你写了40多M,加上虚拟机本身,加上各种类各种对象和垃圾回收器,差不多溢出了。你设置下虚拟机内存大小吧,具体我忘记了。。好像是runasapplication 里面的config,填入参数
[解决办法]
Java code
解决方法:调用ObjectOutputStream的reset方法,丢弃缓存中已发送过的对象如下事例用到流控的思想:丢弃缓存中已发送的对象。。将文件1写入到文件2...        File csvFile = new File("文件1");        File objFile = new File("文件2");        int recInterval = 10000;                try {            Date start = new Date();            System.out.println(start + ": started with interval " + recInterval);                        int count = 0;            BufferedReader bufRdr = new BufferedReader(                    new FileReader(csvFile));            ObjectOutputStream oos = new ObjectOutputStream(                    new FileOutputStream(objFile));            String line;            while( (line = bufRdr.readLine()) != null) {                String [] cols = line.split(",");                // oos.writeUnshared(cols);                oos.writeObject(cols);                ++count;                if (count % recInterval == 0)                    oos.reset();            }            bufRdr.close();            oos.close();                                    Date finish = new Date();            System.out.println(finish + ": finished for " + count + " records");             System.out.println("Execution time (ms): " + (finish.getTime() - start.getTime()));             System.out.println();        }        catch (Exception ex) {            ex.printStackTrace();        }
[解决办法]
http://www.iteye.com/problems/21351

lz看看这里的方法 你试试看。。。


[解决办法]

探讨
引用:

http://www.iteye.com/problems/21351

lz看看这里的方法 你试试看。。。


问题没有解决,如果把大的对象切分的话,不知道该如何切分。
切分后还得整合起来,挺麻烦的。

[解决办法]
-Xmx 256m
[解决办法]
我前两天也遇到这样的错误 我当时就是类没有序列化
[解决办法]
改下jvm的内存大小,也可以分开写入,一次不要写的那么多!
[解决办法]
解决了吗?没的话看看这个:
http://okone96.itpub.net/post/9033/328376

热点排行