XML - статьи

/A>Вычисление выражения и сборка мусора


Сборка мусора – это процесс автоматического управления памятью, который производит поиск и освобождение областей памяти, занимаемых теми объектами программы, на которые программа никогда больше не будет ссылаться в будущем. Автоматическая сборка мусора обеспечивается в языках функционального программирования семейства Лисп, и в частности в языке Scheme, на котором написана рассматриваемая в данной работе реализация языка XPath.

Предложенный в разделе  алгоритм вычисления выражений языка XPath предоставляет сборщику мусора возможность уже по ходу вычисления над некоторым SXML-документом выражения XPath освобождать те части документа, которые уже больше не потребуются для дальнейшего вычисления выражения.

Проиллюстрируем данное утверждение с помощью рис. , изображающего дерево некоторого XML-документа, представленного в виде SXML. Необходимо заметить, что в соответствии с реализацией S-выражений между узлами дерева имеются лишь однонаправленные указатели «предок-потомок», которые на рис.  обозначены стрелками, ориентированными в направлении указателей. Предположим, что над рассматриваемым документом производится вычисление некоторого выражения XPath, и в данный момент вычислений контекстным узлом является узел дерева документа, который помечен на рис.  буквой

К. Будем также считать, что для последующего вычисления выражения требуется родительский узел контекстного узла, и поэтому в соответствии с предложенным алгоритмом в контексте вычисления сохранен этот родительский узел (на рис.  он помечен буквой Р).

Пример дерева XML-документа, над которым производится вычисление некоторого выражения XPath. Буквой К обозначен контекстный узел, буквой Р – родительский узел для контекстного узла.

Проследив за указателями, имеющимися в дереве документа, легко видеть, что дальнейшее вычисление выражения XPath будет производиться в рамках поддерева, выделенного на рис.  жирными линиями, поскольку лишь до узлов этого поддерева можно добраться из узлов, содержащихся в рассматриваемом нами контексте вычисления –

К и Р. Остальные узлы дерева документа (изображенные на рис.  тонкими линиями) в дальнейшем вычислении выражения XPath заведомо участвовать не будут, поэтому, если на них нет ссылок и из других мест прикладной программы, эти узлы уже в процессе вычисления выражения XPath могут освобождаться сборщиком мусора.

Рассмотренное свойство имеет важное значение для случаев, когда вычисление выражения XPath осуществляется над большими деревьями документов, и при этом прикладное приложение интересует лишь результат вычисления, который содержит лишь небольшие поддеревья дерева исходного документа.



Содержание раздела