0%
Pular para o conteúdo principal
0%

5.3

5.3 Alocação de Armazenamento e Coleta de Lixo

Na seção 5.4, mostraremos como implementar um avaliador JavaScript como uma máquina de registradores. Para simplificar a discussão, assumiremos que nossas máquinas de registradores podem ser equipadas com uma memória com estrutura de lista, na qual as operações básicas para manipular dados com estrutura de lista são primitivas. Postular a existência de tal memória é uma abstração útil quando se está focando nos mecanismos de controle em um interpretador, mas isso não reflete uma visão realista das operações de dados primitivas reais de computadores contemporâneos. Para obter uma visão mais completa de como os sistemas podem suportar memória com estrutura de lista de forma eficiente, devemos investigar como a estrutura de lista pode ser representada de uma maneira que seja compatível com memórias de computador convencionais.

Existem duas considerações na implementação de estrutura de lista. A primeira é puramente uma questão de representação: como representar a estrutura de "caixa-e-ponteiro" de pares, usando apenas as capacidades de armazenamento e endereçamento de memórias de computador típicas. A segunda questão diz respeito ao gerenciamento de memória conforme uma computação prossegue. A operação de um sistema JavaScript depende crucialmente da capacidade de continuamente criar novos objetos de dados. Estes incluem objetos que são explicitamente criados pelas funções JavaScript sendo interpretadas, bem como estruturas criadas pelo próprio interpretador, como ambientes e listas de argumentos. Embora a criação constante de novos objetos de dados não representaria problema algum em um computador com uma quantidade infinita de memória rapidamente endereçável, as memórias de computador estão disponíveis apenas em tamanhos finitos (que pena). JavaScript assim fornece uma facilidade de alocação automática de armazenamento para suportar a ilusão de uma memória infinita. Quando um objeto de dados não é mais necessário, a memória alocada a ele é automaticamente reciclada e usada para construir novos objetos de dados. Existem várias técnicas para fornecer tal alocação automática de armazenamento. O método que discutiremos nesta seção é chamado de coleta de lixo.