Как добавить безопасную охрану для освобождения ресурса, который должен был быть явно освобожден клиентским кодом - PullRequest
0 голосов
/ 01 июня 2011

Предполагается, что пользователь вызовет Player.close() для освобождения некоторых критических ресурсов, управляемых собственным кодом, и уничтожения нескольких внутренних потоков Java, созданных для объекта player.Однако пользователь не смог вызвать его, что привело к некоторой утечке ресурсов.Добавление метода Finalize не будет работать, потому что не будет вызван finalize, поскольку внутренние потоки не были уничтожены ...

Как нам справиться с этой ситуацией?

EDIT:

Я посмотрю в фантомную ссылку.Кроме того, не должен ли я завершить эти агрегированные потоки, чтобы объект player стал подходящим для gc?

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Я все еще думаю, что finalize - это единственный путь, но вам придется использовать несколько осторожно размещенных слабых ссылок, чтобы дать ГК шанс войти.

2 голосов
/ 01 июня 2011

Заставьте внутренние потоки хранить только слабые ссылки на эти вещи.

Возможно, стоит подумать об изучении фантомных ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...