问题描述
我要写一个java程序,一项功能是读取文件,进行解释。文件可能很大,全部load在内存是不可能的了。我把文件部分的load在byte[]数组里面,然后进行解释。解释的过程在C代码里面完全是自己写的,我负责内存的分配与销毁。但是java下我找到了一些第3方API可以做微观的解释,这样可以节省很多时间和脑力。但是这个接口需要传入String,解释过程中也许也产生中间的String。我很担心会出现OOM。我很想节省内存,不知道有什么法子可以让String的空间可以重用?估计这里大部分人写程序只考虑逻辑正确,很少需要考虑内存的。其实我也一样,大多数情况下都不考虑这个问题。
解决方案
解决方案二:
可以考虑使用stringbuffer,将数据读入到流中进行处理,如buffereader等
解决方案三:
可以考虑使用stringbuffer,将数据读入到流中进行处理,如buffereader等尽量少声明全局变量!还有就是注意不要写stringa=“”;
解决方案四:
该回复于2010-11-25 13:48:26被版主删除
解决方案五:
一般不会出现这种情况java操作大文件虽然有时候慢但是按行读取的话while循环中string也就那么几个一个循环过了再行赋值也不会占用多少内存倒是性能是大家经常考虑的因为很少会碰到这种oom的情况并发,瓶颈基本成第一位的了
解决方案六:
续点加载然后再保存到String,然后再传输
解决方案七:
简化代码
解决方案八:
不出产生OutOfMemoryError的。
解决方案九:
我是楼主其实我也有意识使用StringBuilder,但是第3方API只用String作为参数如果用第3方库,就要从byte[]数组中建立String再传入API进行解释,我觉得这样会增加内存消耗。如果我直接操作byte[]数组,工作量就要加大很多,而且容易出错。
解决方案十:
想了一下,要想优雅的编程,就很难减少内存消耗。我还是按照土办法来编好了。