Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Criando vazamento de memoria ao manter a imutabilidade JS

Foi mostrado nessa aula como criar atributos "Privados" , mas eu fiquei pensando que da forma que foi ensinado estaremos criando muitas instancias "desnecessárias", eu sei que o JS tem garbage collector , más ele seria o suficiente para gerir isso ?

Mesmo sendo suficiente, o consumo de recursos extras da maquina, vale a pena ?

6 respostas

Fala ai Pablo, tudo bem? É uma ótima preocupação e vale muito a gente olhar para esses pontos no dia-a-dia.

O JavaScript tem um gerenciamento de memória muito bom, ele utiliza vários designs para garantir que o consumo será o minimo possível e o mais compartilhado que puder.

Por exemplo quando a gente cria objetos ele mantém um shape compartilhado na cadeia de Prototype e apenas cria novos endereços de memória e alocações para seus valores.

Outra coisa maneira é o inline cache que eles fazem.

Além de outras N práticas e boas práticas de performance.

Espero ter ajudado.

Obrigado pela resposta Matheus Castiglioni, eu não conheço a linguagem muito a fundo então fui pesquisar os termos como shape e inline, esse ultimo termo acredito ter entendido em partes, me corrija se eu estiver errado, o JS ao executar o programa e passar por determinada instrução de código a partir de uma "interação" ele "compila" aquele pequeno trecho em um endereço na memoria para fazer um cache do resultado.

let objeto = {
    dizOi:function(){
        return "Oi";
    }
}

objeto.dizOi();

Ao executar esse código o JS de forma inteligente compila esse resultado e salva na memoria, assim ao chamar o método novamente ele não irá executar o código novamente e sim apenas apontará para o resultado que foi previamente salvo.

Todavia eu não tenho certeza se é isso mesmo, ao menos foi o que eu consegui entender, peço que se puder explicar melhor esses termos seriá de grande ajuda.

Fala Pablo, é isso ai mesmo, você está totalmente correto.

Não sei qual artigo tu leu, mas tem um do Mathias (core dev da v8): https://mathiasbynens.be/notes/shapes-ics

Abraços e bons estudos.

Esse é o link do artigo que li: https://richardartoul.github.io/jekyll/update/2015/04/26/hidden-classes.html

O que eu pude constatar é que a V8 é um trabalho muito bem feito, pelo tipo de otimização que ela faz no código.

solução!

Fala Pablo, não só a v8 como o Chrome também, ambos são incriveis.

Muito gente fala que consome muito memória, isso e aquilo; mas, de fato não sabem o que realmente a v8 e Chrome fazem: https://blog.matheuscastiglioni.com.br/desconstruindo-a-web-como-v8-funciona/

Nesse post tem um link para varios outros da série desconstruindo a web.

Abraços

Obrigado Matheus, seu artigo foi bem interessante, eu gostaria de deixar aqui um link que explica de forma resumida a diferença entre o

*V8: Google Chrome

*SpiderMonkey: Firefox

Ambos são interpretadores Javascript, cada um trabalha de um jeito, mas resumindo o V8 compila todo o código e o SpiderMonkey apenas interpreta o código JS, transformando ele em código compilado somente onde ele julga necessário. Na pratica, o V8 pode até consumir um pouco mais de memoria, mas o código é executado mais rápido no geral, enquanto o SpiderMonkey consume menos memoria, mas perde desempenho caso sofra "ramificações" de mais. A baixo segue um link que explica isso de uma maneira e mostra cotextos onde se vale a pena optar por um ou por outro:https://www.quora.com/How-do-V8-and-SpiderMonkey-differ