【问题标题】:How does Java (Android) reuse free-ed memory?Java(Android)如何重用释放的内存?
【发布时间】:2014-01-29 18:07:24
【问题描述】:

我有一个 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运行时会优化案例吗?谢谢。

【问题讨论】:

    标签: java android memory-management


    【解决方案1】:

    byte[] 将被垃圾回收。在这种情况下使用 NIO ByteBuffer 是不合适的,因为无论如何你都会得到 byte[],尽管稍后它可能会派上用场。

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

    大部分你不必担心这些事情(除非你要连接大量的字符串,因为这个原因,这是非常低效的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-06
      • 2011-12-08
      • 2020-05-21
      • 1970-01-01
      • 2011-04-02
      • 2014-06-13
      • 2014-08-17
      • 1970-01-01
      相关资源
      最近更新 更多