我有一个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运行时会优化案例吗?感谢。
答案 0 :(得分:3)
byte[]
将被垃圾收集。在这种情况下使用NIO ByteBuffer是不合适的,因为你还是得到了byte [],虽然它可以在以后派上用场。
每次循环迭代时,都会创建byte[]
并填充数据,从流中读取,然后不再使用。一旦内存不足(或者更早,取决于JVM的运行方式),阵列将被删除并且内存可用。
你不必担心大多数这样的事情(除非你连接大量的字符串,因此这是非常低效的。)