2015-12-28 4 views
0

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

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

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

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

ответ

1

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

[...]

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

Это может быть достигнуто с weak references

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

  • объект собирается собираться;

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

+0

Спасибо. Мы не используем полномасштабную библиотеку xul в нашем проекте (просто SpiderMonkey), поэтому мы не можем использовать Component.utils. Но финальный сборник «СОАЛасс» достаточно хорош для нашей задачи. Вам понадобится дополнительная работа по переносу не-объектов GCThings в JSObject, и это должно сделать трюк. –

Смежные вопросы