首页 / JAVA / java过度使用内存
java过度使用内存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java过度使用内存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2012字,纯文字阅读大概需要3分钟。
内容图文
![java过度使用内存](/upload/InfoBanner/zyjiaocheng/955/cb1b98f693e746b382d21a0ae7918458.jpg)
在我的一个项目中,我不断压缩很少的数据块.
现在我发现jvm然后增长到6GB的RAM(驻留(RES)RAM,不共享或虚拟等)然后因为内存不足而死亡.
好像垃圾收集器从未运行过.
我已经拿出相关代码并将其粘贴在下面.当我运行它(java6,32位linux)时,它增长到1GB内存.
有人知道如何减少内存使用量?
import java.util.Random;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
class test {
int blockSize = 4096;
Random r = new Random();
public test() throws Exception {
blockSize = 4096;
byte [] data = new byte[blockSize];
for(int index=0; index<blockSize; index++)
data[index] = (byte)r.nextInt();
for(long cnt=0; cnt<1000000; cnt++) {
byte [] result = compress(data);
if (result != null)
data[0] = result[0];
}
}
byte [] compress(byte [] in) {
assert in.length == blockSize;
Deflater compresser = new Deflater();
compresser.setInput(in);
compresser.finish();
byte [] out = new byte[in.length];
int outLen = compresser.deflate(out);
if (outLen < blockSize) {
byte [] finalOut = new byte[outLen];
System.arraycopy(out, 0, finalOut, 0, outLen);
return finalOut;
}
return null;
}
public static void main(String [] args) throws Exception {
new test();
}
}
解决方法:
好吧,Folkert van Heusden解决了他自己的问题,但总结一下:
在压缩早期(byte [] in)-method中,我们创建了一个java.util.zip.Deflater.
我们使用Deflater做一些事情,然后我们离开compress() – 方法.我们放弃了对deflater变量的引用.此时,Deflater已不再使用,正在等待被垃圾收集器杀死.
Deflater分配Java堆内存和C/C++ /本机堆内存.由Deflater分配的本机堆内存将保留,直到垃圾收集器调用Deflater.finalize-method.如果垃圾收集器运行速度不够快(可能有足够的免费Java堆内存),我们可能会耗尽C/C++堆内存.如果发生这种情况,我们将得到“内存不足” – 错误.
Oracle错误报告JDK-4797189可能是相关的.它包含一个代码片段,用于说明和重现问题:
public class Bug {
public static void main( String args[] ) {
while ( true ) {
/* If ANY of these two lines is not commented, the JVM
runs out of memory */
final Deflater deflater = new Deflater( 9, true );
final Inflater inflater = new Inflater( true );
}
}
}
解决方案是通过调用Deflater.end() – 方法(或Inflater.end())来释放资源.
内容总结
以上是互联网集市为您收集整理的java过度使用内存全部内容,希望文章能够帮你解决java过度使用内存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。