Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
59 / 59 / 20
Регистрация: 21.03.2013
Сообщений: 186

Input/Output streams и сборщик мусора

15.11.2016, 15:45. Показов 583. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пишу приложение, которое в реальном времени записывает звук со звуковой карты, конвертирует в mp3, бьет на PES-пакеты, потом PES разбивает на TS пакеты и все это отправляет мультикастом в сеть по UDP.
Каждая операция независима и происходит в своем потоке. Вычитал, что для передачи данных между потоками удобно использовать PipedInputStream и PipedOutputStream. Их и использую в начале цепочки, когда манипулирую байтами и байтовыми массивами.
Далее, когда уже разговор идет о пакетах данных (PES, TS, UDP) я использую ObjectInputStream и ObjectOutputStream, которые созданы на основе PipedInputStream. Все работает отлично. Создал пакет - сериализовал и бросил его в ObjectOutputStream. В другом программном потоке достал объект, обработал, сериализовал и отправил дальше в ObjectInputStream.
Но вот беда, нарвался в одной статейке на такую фразу:
Отдельного обсуждения заслуживает вышеупомянутый факт, что ссылки на объекты кэшируются в поток вывода. Согласно этому, система не может выполнять сбор мусора для записанных в поток объектов если поток не был закрыт. Лучшее решение (как всегда при помощи операций ввода/вывода) - это как можно скорее закрывать потоки после выполнения записи.
Это касательно ObjectInputStream/ObjectOutputStream и сериализации.

Как это отразится в контексте моей задачи? Там постоянно работают потоки и они постоянно обмениваются данными через всевозможные input и output стримы. Причем это планируется делать 24/7.
Т.е. сборщик мусора тупо не будет убирать то, что попало в ObjectOutputStream и ObjectInputStream, пока я их не закрою? Или пока не съест всю оперативку?

Добавлено через 1 час 0 минут
Ответ на вопрос нашел. Если кому интересно:
Предварительным условием исключения OutOfMemoryError является то, что сборщик мусора сделал все возможное, чтобы освободить память и не сумел сделать это.
Для того, чтобы object stream не использовал механизм связей:

writeObject ()
readObject ()

должны быть заменены методами:

writeUnshared ()
readUnshared ()

readUnshared (), в отличие от readObject (), не будет хранить ссылку в таблице ссылок ObjectInputStream, и таким образом будет предотвращена утечка памяти.
Другим решением является вызов метода reset() ObjectOutputStream после каждой записи. Это будет иметь тот же эффект.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2016, 15:45
Ответы с готовыми решениями:

Сборщик мусора
Соберет ли сборщик мусора поля объекта C, такие как "a" и "b", или же нужно самому в явной форме ставить null каждому полю (допустим, в...

Сборщик мусора JAVA
Здравствуйте, хотел прояснить некоторые моменты при работе сборщика мусора на JAVA. Как я понял из изученного материала поля класса...

Сборщик мусора не удаляет локальную переменную
При старте программы выводится сообщение, о том что бы user подождал пока прога проверит наличие обнов. Вывод сообщения производится в...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.11.2016, 15:45
Помогаю со студенческими работами здесь

сборщик мусора
Доброго времени суток. Подскажите пожалуйста каким образом сборщик мусора выбирает какие созданные объекты удалять, а какие не удалять, по...

Количество объектов и сборщик мусора - подскажите новичку
Привет всем! Обдумываю простую детскую игру на java для андроид, узнал о сборщике мусора и том, как он тормозит игру. Вопросы: 1....

Проблема с Input/Output
Добрый день! Проблема в следующем: После соединения клиента с сервером, оба из своих сокетов берут входные и выходные потоки и...

Сборщик мусора
Доброго вам времени суток! У меня вопрос можно ли автоматизировать удаление объектов размещаемых в куче? (Желательно обойтись только STL).

Сборщик мусора
Наткнулся на такие строки и прошу пояснить, что значит. Во многих языках управление ресурсами в основном делегируется сбор­ щику...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru