Java(Android)如何重用free-ed内存?

时间:2014-01-29 18:07:25

标签: java android memory-management

我有一个Android应用程序,它通过网络逐个读取大量的字节块,然后将它们组合成一个大缓冲区。例如,

ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );

while (i < 10) {
    // read is an API in a lib that returns byte[].
    byte[] bytes = API.read();
    outputStream.write(bytes);
    i++;
}

...

问题是关于字节的内存。有没有办法强制Java为所有读取使用相同的字节块?所以它不必过多地释放和分配内存? JAVA运行时会优化案例吗?感谢。

1 个答案:

答案 0 :(得分:3)

byte[]将被垃圾收集。在这种情况下使用NIO ByteBuffer是不合适的,因为你还是得到了byte [],虽然它可以在以后派上用场。

每次循环迭代时,都会创建byte[]并填充数据,从流中读取,然后不再使用。一旦内存不足(或者更早,取决于JVM的运行方式),阵列将被删除并且内存可用。

你不必担心大多数这样的事情(除非你连接大量的字符串,因此这是非常低效的。)

相关问题