Оператор new
Файла ако е 60 000 bytes. Този while цикъл ще мине 60 000/4069 пъти и ще заделя нова памет за масива byte[]. Въпроса ми е тази нова памет изчиства ли се когато изтича всяка бройка на цикъла? И втория ми въпрос е така ли е по-добре или извън while да се декларира новата памет(buffer) на която после да се присвояват различни стойности?
FileInputStream is = new FileInputStream(file);
FileOutputStream os = new FileOutputStream(fileCopy);
while (true) {
byte[] buffer = new byte[4069];
int size = is.read(buffer);
if (size == -1)
{
break;
}
os.write(buffer, 0, size);
}
Ахам но така по-често ще се вика garbage collector-а. Чувал съм, че той забавя работата на програмата когато работи. По-вярно ли е извън цикъла да се декларират новите променливи за да се избегне например по-малко работа на garbage collector-а
Е ако трябва да са с нови данни на всяка итерация няма огромно значение дали ще я декларираш извън цикъла и ще я зануляваш в него или ще я редекларриаш в цикъла. Този байт масив, ако някой от методите го модифицира, както предполагам, че прави read() няма да е много готино да дадеш на втората итерация модифициран байт масив.
Колектора се стартира на определено време (като job някакъв) а не се извиква, въпреки че може да се извика и имплицитно до колкото си спомням. Така че и да изкараш променливат извън цикъла, пак ще мине толкова пъти колкото и ако е вътре в цикъла.