Каков рекомендуемый подход к предотвращению сбора мусора промежуточных привязок в JavaFX 8?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Каков рекомендуемый подход к предотвращению сбора мусора промежуточных привязок в JavaFX 8?

Сообщение Anonymous »

TL;DR: GC поглощает мои активные привязки.
У меня есть приложение, которое было разработано и успешно развернуто с использованием JavaFX 2.2 на Java 7.< /p>
Когда я обновил/перешел на JavaFX 8.0 (и Java 8), некоторые функции «загадочным образом» переставали работать — в середине жизненного цикла приложения — без каких-либо исключений или других признаков ошибочного изменения состояния. Например; кнопки перестают работать, пользовательские средства визуализации ячеек перестали применяться, включенное/отключенное состояние перестало обновляться.
После многих часов копания я думаю, что отследил проблему до того, что я понимаю. будут некоторые изменения в JavaFX 8 и внутреннее использование javafx.beans.WeakListener для устранения утечек памяти, обнаруженных в JavaFX 2.2. По сути, кажется, что привязки, которые я создаю для управления зависимостью состояния данных, собирают мусор, несмотря на то, что узлы, которыми они управляют, все еще активны.
проблемы чаще всего возникают, когда я создаю экземпляры привязок с использованием анонимных классов. Некоторые, но не все мои проблемы можно решить, сохранив ссылку на привязку в качестве члена класса, тем самым предотвращая ее сбор сборщиком мусора. У меня даже были случаи, когда целые контроллеры подвергались сборке мусора, потому что они создавались посредством загрузки FXML и на них никогда не ссылались напрямую (теперь я всегда помещаю ссылку на контроллер в свойство userData родительского узла).
Мои проблемы:
  • связанные ошибки возникают недетерминировано (или, по крайней мере, являются функцией объема памяти).
  • если следует избегать привязок через анонимные классы, то потребуется много работы, чтобы найти каждый экземпляр в большой существующей базе кода, чтобы изменить его.
  • даже если бы я мог найти каждый экземпляр, это сильно загромождает код.
К сожалению, я не могу найти в документации Oracle ничего, что говорило бы: «не создавать привязки с анонимными классами» или любые другие рекомендации по обеспечению надежного использования привязок. Многие примеры кода используют привязки анонимных классов. Я также не могу найти никаких заметок о том, как правильно обновить приложение JavaFX 2.2 до JavaFX 8.
Любые советы от людей, разрабатывающих нетривиальные приложения JavaFX, мы будем очень признательны. (Я разрабатываю приложения JavaFX 2.x уже 3 года, а приложения Swing более 15 лет, так что это не совсем вопрос n00b).

Примечание. Мой вопрос похож на «Очистка прослушивателей и привязок свойств JavaFX (утечки памяти), но я хочу конкретно и окончательно знать, как использовать сложные привязки и гарантировать, что они не будут собираться мусором в случайное время, не прибегая к загрязняя классы ссылками на каждый экземпляр.

Подробнее здесь: https://stackoverflow.com/questions/282 ... -being-gar
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»