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

问题描述

我要写一个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[]数组,工作量就要加大很多,而且容易出错。
解决方案十:
想了一下,要想优雅的编程,就很难减少内存消耗。我还是按照土办法来编好了。

时间: 2024-07-28 22:47:01

[深度]java 如何编程节省内存?的相关文章

Java编程解析节省内存效率高的方法

原文:http://developer.51cto.com/art/201104/255104.htm 很多人都说"Java完了,只等着衰亡吧!",为什么呢?最简单的的例子就是Java做的系统时非常占内存!一听到这样的话,一定会有不少人站出来为Java辩护,并举出一堆的性能测试报告来证明这一点.其实从理论上来讲Java做的系统并不比其他语言开发出来的系统更占用内存,那么为什么却有这么多理由来证明它确实占内存呢?两个字,陋习(编程习惯). Java编程解析节省内存效率高的方法: 1.别用

《Java并发编程的艺术》一一3.5 锁的内存语义

3.5 锁的内存语义 众所周知,锁可以让临界区互斥执行.这里将介绍锁的另一个同样重要,但常常被忽视的功能:锁的内存语义.3.5.1 锁的释放-获取建立的happens-before关系 锁是Java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 下面是锁释放-获取的示例代码. class MonitorExample { int a = 0; public synchronized void writer() { // 1 a++; //

《Java并发编程的艺术》一一3.1 Java内存模型的基础

3.1 Java内存模型的基础 3.1.1 并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递.在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信.在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信.同步是指程序中用于控制不同线程间操作发生相对

点评五款用于 Linux 编程的内存调试器

点评五款用于 Linux 编程的内存调试器 Credit: Moini 作为一个程序员,我知道我肯定会犯错误--怎么可能不犯错!程序员也是人啊.有的错误能在编码过程中及时发现,而有些却得等到软件测试了才能显露出来.然而,还有一类错误并不能在这两个阶段被解决,这就导致软件不能正常运行,甚至是提前终止. 如果你还没猜出是那种错误,我说的就是和内存相关的错误.手动调试这些错误不仅耗时,而且很难发现并纠正.值得一提的是,这种错误很常见,特别是在用 C/C++ 这类允许手动管理内存的语言编写的软件里. 幸

Java游戏编程初步

编程 现在流行的游戏似乎都是用C或C++来开发的.在java平台上几乎没有很大型及可玩的流行游戏.由于java是个新生语言,他的许多特性还有待大家的发掘,但是我们不能否认Java在游戏编程方面的强大性.本文将带领大家一步一步学习编写Java游戏.最终打造属于自己的Java游戏. 在开始之前我们得确认你已经安装了Java JDK,并已经安装了浏览器软件如IE.本章是以Internet为开发对象,一步一步教大家认识Java的Thread.Applets-.以及游戏编程要注意的一些方方面面并在每一小部

Java多线程编程实战之不提倡的方法

不提倡使用的方法是为支持向后兼容性而保留的那些方法,它们在以后的版本中可能出现,也可能不出现.Java 多线程支持在版本 1.1 和版本 1.2 中做了重大修订,stop().suspend() 和 resume() 函数已不提倡使用.这些函数在 JVM 中可能引入微妙的错误.虽然函数名可能听起来很诱人,但请抵制诱惑不要使用它们. 调试线程化的程序 在线程化的程序中,可能发生的某些常见而讨厌的情况是死锁.活锁.内存损坏和资源耗尽. 死锁 死锁可能是多线程程序最常见的问题.当一个线程需要一个资源而

Java Applet编程学习总结

一.Java Applet的运行原理和生命周期 1.Applet被嵌入到HTML页面中,并由applet的容器(appletviewer或者Web浏览器)执行. 2.Applet的运行由浏览器控制,不由Applet中的代码控制.当浏览器载入包含由Applet的Web页面时,它将生成一个Applet类的对象,然后利用 Applet类对象的五个public的void方法控制Applet的执行,这五个方法如下:init,start,paint,stop,destory; 3.Applet有5个publ

Java网络编程从入门到精通(34)

Java网络编程从入门到精通(34):读写缓冲区中的数据---使用get和put方法按顺序读写单个数据 对于缓冲区来说,最重要的操作就是读写操作.缓冲区提供了两种方法来读写缓冲区中的数据:get.put方法和array方法.而get.put方法可以有三种读写数据的方式:按顺序读写单个数据.在指定位置读写单个数据和读写数据块.除了上述的几种读写数据的方法外,CharBuffer类还提供了用于专门写字符串的put和append方法.在本文及后面的文章中将分别介绍这些读写缓冲区的方法. 虽然使用all

andorid编程中内存管理优化

  andorid 我们如何管理你的内存? tank前面做项目时遇到了一个错误:java.lang.OutOfMemoryError 我当时就没有花很多时间去处理内存这个问题.当时就以自己JAVA编程时的习惯以为像PC编程一样,自顾的一顿敲下去. 因为前面我也有做嵌入式方面的开发,当时是基于纯C的嵌入式开发,在程序开发时格外的小心指针和内存的分配,一不小心就会造成把机子内存泄露最后导致死机. 因为JAVA里没有指针,也不能像C里一样Malloc和free,JAVA是自己管理内存的分配和释放所以我