[深度]java 如何编程节省内存?

seeku 2010-11-24 05:50:54
我要写一个java程序,一项功能是读取文件,进行解释。
文件可能很大,全部load在内存是不可能的了。
我把文件部分的load在byte[]数组里面,然后进行解释。

解释的过程在C代码里面完全是自己写的,我负责内存的分配与销毁。
但是java下我找到了一些第3方API可以做微观的解释,这样可以节省很多时间和脑力。
但是这个接口需要传入String,解释过程中也许也产生中间的String。
我很担心会出现 OOM 。

我很想节省内存,不知道有什么法子可以让String的空间可以重用?

估计这里大部分人写程序只考虑逻辑正确,很少需要考虑内存的。
其实我也一样,大多数情况下都不考虑这个问题。
...全文
269 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
seeku 2010-11-25
  • 打赏
  • 举报
回复
想了一下,要想优雅的编程,就很难减少内存消耗。我还是按照土办法来编好了。
seeku 2010-11-24
  • 打赏
  • 举报
回复
我是楼主

其实我也有意识使用 StringBuilder,但是第3方API只用String作为参数

如果用第3方库,就要从byte[]数组中建立String再传入API进行解释,我觉得这样会增加内存消耗。
如果我直接操作byte[]数组,工作量就要加大很多,而且容易出错。
  • 打赏
  • 举报
回复
不出产生 OutOfMemoryError 的。
caofaping 2010-11-24
  • 打赏
  • 举报
回复
简化代码
czmchen 2010-11-24
  • 打赏
  • 举报
回复
续点加载然后再保存到String,然后再传输
yaoweijq 2010-11-24
  • 打赏
  • 举报
回复
一般不会出现这种情况
java操作大文件虽然有时候慢
但是按行读取的话
while循环中string也就那么几个
一个循环过了再行赋值
也不会占用多少内存
倒是性能是大家经常考虑的
因为很少会碰到这种oom的情况
并发,瓶颈基本成第一位的了
一克代码 2010-11-24
  • 打赏
  • 举报
回复
可以考虑使用stringbuffer,将数据读入到流中进行处理,如buffereader等

尽量少声明全局变量!

还有就是注意不要

写string a=“”;
zjcxy3150 2010-11-24
  • 打赏
  • 举报
回复
可以考虑使用stringbuffer,将数据读入到流中进行处理,如buffereader等

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧