Loading...
DonchoPatronski avatar DonchoPatronski 35 Точки

Оператор 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);
        }

 

Тагове:
0
Java Advanced 31/03/2016 13:49:57
RoYaL avatar RoYaL Trainer 6849 Точки

Ако референциите в масива не се ползват никъде, ще се зачисти тази памет, да. В случая не се ползват, така че като мине garbage collector-а ще се изчистят.

0
DonchoPatronski avatar DonchoPatronski 35 Точки

Ахам но така по-често ще се вика garbage collector-а. Чувал съм, че той забавя работата на програмата когато работи. По-вярно ли е извън цикъла да се декларират новите променливи за да се избегне например по-малко работа на garbage collector-а

0
RoYaL avatar RoYaL Trainer 6849 Точки

Е ако трябва да са с нови данни на всяка итерация няма огромно значение дали ще я декларираш извън цикъла и ще я зануляваш в него или ще я редекларриаш в цикъла. Този байт масив, ако някой от методите го модифицира, както предполагам, че прави read() няма да е много готино да дадеш на втората итерация модифициран байт масив.

0
g.stoyanov avatar g.stoyanov 776 Точки

Колектора се стартира на определено време (като job някакъв) а не се извиква, въпреки че може да се извика и имплицитно до колкото си спомням. Така че и да изкараш променливат извън цикъла, пак ще мине толкова пъти колкото и ако е вътре в цикъла.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.