@AshFTW

Как работать с потоками в swing?

Короче, использую swingworker для создания потока, в котором выполняются нейросеть. Нейросеть эта потребляет много оперативной памяти. Больше гигабайта. При нажатии на кнопку "старт" меняется название кнопки на "стоп", создётся и обучается нейросеть. При нажатии на кнопку "стоп" меняется название кнопки на "старт", останавливается обучение и удаляется swingworker (что у меня не получается), чтобы не засорять оперативную память.
Вот пример:
https://gist.github.com/AshFTW/dca4655135328ff3cf2...
Вместо обучения нейросети создаю массив, который заполняет память. Как только вызывается onTick.cancel(true) ожидается, что поток остановится и память освободится. Что нужно сделать, что бы поток (возможно даже не swingworker) убился и освободил память?
  • Вопрос задан
  • 582 просмотра
Решения вопроса 1
@AshFTW Автор вопроса
Единственное на данный момент решение - создание своего SwingWorker'а (спасибо patrick за его MySwingWorker).
Из плюсов - больше не выскакивает
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Cannot allocate new FloatPointer(1895946), totalBytes = 80005726, physicalBytes = 3705155584
	at org.bytedeco.javacpp.FloatPointer.<init>(FloatPointer.java:76)
...
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.OutOfMemoryError: Physical memory usage is too high (3725254656 > Pointer.maxPhysicalBytes)
...

Из минусов - всё равно не освобождается память по окончании потока.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы