найти количество ссылок на объект Java или проверить, есть ли на него ссылки в другом месте - PullRequest
0 голосов
/ 21 марта 2011

Сценарий:

У меня есть код, который изменяет объекты, и другой код, который этого не делает, то есть он рассматривает объекты, с которыми работает, как неизменяемые. Но в настройке с параллельными рабочими задачами это работает надежно, только если можно быть уверенным, что некоторые объекты не будут изменены из стороннего кода или кода библиотеки, что может произойти, если есть ссылки вне области моего кода. Одна возможность - всегда передавать копии вместо оригинальных объектов. Но иногда можно было бы сэкономить память и время, если бы просто знал, что нет других ссылок на объект, задерживающийся в другом месте.

Вот псевдокодированный универсальный метод «заморозки», который берет объект и возвращает идентичный «неизменный»:

public <T> T freeze(T x) { 
    if immutable anyway then return x
    else if "not referenced in other objects" then return x
    else if x clonable then return clone of x
    else if x serializable then return serialized/deserialized x
    else ....
}

То, что я ищу, это часть "нет ссылок в других объектах".
Есть предложения?

1 Ответ

1 голос
/ 21 марта 2011

Вы можете отслеживать количество ссылок для объекта.

Я не верю, что в Java есть что-то, что делает то, что вы хотите. GC можно использовать для чего-то подобного, но запуск Full GC для выполнения этой проверки не очень хорошая идея.

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