Уведомление SpiderMonkey GC и слабые ссылки

Можно ли получать уведомления, когда SpiderMonkey собирает (или собирается собрать) конкретную «вещь GC»?

В V8 есть «слабые дескрипторы», к которым привязаны обратные вызовы, они должны вызываться, когда V8 GC решает, что объект с дескриптором стал недостижимым. Даже если обратный вызов не вызывается (что возможно в соответствии с документацией V8), мы все равно можем проверить, собирается ли объект, на который указывает дескриптор, будет собран с помощью v8::Persistent<T>::IsNearDeath().

В SpiderMonkey у нас есть PersistentRooted, что является сильным ориентиром. Но мы не нашли способа безопасно ссылаться на объект слабым образом, поэтому мы можем проверить хотя бы одно (или несколько) из следующих условий:

  • объект стал недоступен;
  • объект собран;
  • объект вот-вот будет собран;
  • объект имеет только одну ссылку (которую содержит наше приложение)

person Denis Yarkovoy    schedule 28.12.2015    source источник


Ответы (1)


Но мы не нашли способа безопасно ссылаться на объект слабым способом, поэтому мы можем проверить хотя бы одно (или несколько) из следующих условий.

[...]

  • объект собран;

Этого можно добиться с помощью слабых ссылок< /а>

Вы можете просто проверить, возвращают ли они null, если хотите их проверить.

  • объект вот-вот будет собран;

По крайней мере, из C кодируйте финализатор JSClass должен позволить вам это сделать.

person the8472    schedule 28.12.2015
comment
Спасибо. Мы не используем полноценную библиотеку xul в нашем проекте (только SpiderMonkey), поэтому мы не можем использовать Component.utils. Но финализатор JClass подходит для нашей задачи. Потребуется дополнительная работа, чтобы обернуть необъектные GCThings в JSObject, и это должно помочь. - person Denis Yarkovoy; 29.12.2015