2014-01-29 3 views
0

У меня есть приложение для Android, которое читает много кусков байтов по одному по сети, а затем объединяет их в большой буфер. Например,Как Java (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 оптимизировать ситуацию? Благодарю.

ответ

3

byte[] будет собираться мусором. Неправильно использовать NIO ByteBuffer в этом случае, так как вы все равно получаете байт [], хотя это может пригодиться позже.

С каждой итерацией цикла создается и заполняется byte[] данными, считывается из потока, а затем больше не используется. Как только память будет работать (или раньше в зависимости от того, как работает JVM), массив будет удален и память будет доступна.

Вы не должны беспокоиться о таких вещах наиболее времени (если вы не объединяете тонны струн, что крайне неэффективно по этой причине).

Смежные вопросы