Как используются слабые массивы? - PullRequest
6 голосов
/ 08 февраля 2011

Вопрос говорит сам за себя. У меня есть структура данных, которую я не могу маршал из-за слабой хеш-таблицы ... интересно, могу ли я от нее избавиться:)

Ответы [ 2 ]

11 голосов
/ 08 февраля 2011

Слабый массив - это массив слабых указателей. Слабый указатель - это ссылка на значение, которое может быть собрано мусором.

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

Примером использования является источник, который передает данные в несколько приемников. Если источник содержит регулярные указатели на приемники, всякий раз, когда приемник больше не нужен, он не будет собирать мусор до тех пор, пока источник не будет (что, например, может никогда не произойти). Если источник использует слабые ссылки на приемники, данные приемники могут собираться перед источником.

Другим примером является хеширование для типа, который использует слабые хеш-таблицы (которые включают в себя слабые массивы). Быстро, hashconsing - это способ запомнить все значения данного типа, которые созданы и живут в программе. Вместе с соответствующим конструктором значений это может обеспечить максимальное совместное использование значений этого типа и позволяет реализовать структурное равенство для этого типа как физическое равенство. В этом случае, если используется неслабая хеш-таблица, значения, которые больше не используются программой, никогда не будут собираться мусором.

Наконец, многие люди (ошибочно) считают, что слабые ссылки полезны для реализации кэшей. Сохраните слабую ссылку на значение, если оно было собрано мусором, перезагрузите / пересчитайте значение. Это не очень хороший алгоритм кэширования, потому что основная сборка мусора возвращает любое значение, на которое больше не ссылаются. Таким образом, ваш алгоритм кэширования не обладает предсказуемостью или полезным свойством, например, например, размер кэша / доступной памяти не превышает заданное соотношение.

1 голос
/ 09 февраля 2011

Используйте биективную пару картографических функций между вашей структурой данных и ее структурно согласованным представлением, совместимым с модулем Маршалла.

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