Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Consumo de memória

Olá, tudo bem ?

Como eu não fiz faculdade de TI acabei pulando o entendimento sobre o consumo de memória de programação em si kk .. Onde que vocês sugerem que eu me informe sobre o porque uma programação, como Java por exemplo, consome muito mais memória do que uma outra, como Python ? E tem alguma relação entre consumir memória e consumir CPU ?

1 resposta
solução!

Olá, Enzo. Beleza?

Gerenciamento de memória é um assunto muito interessante, mas bem extenso também. Tem vários níveis de profundidade.

Vou tentar responder especificamente suas perguntas, mas vou deixar alguns temas e links para você pesquisar mais, beleza?

Quando os programas são executados, eles usam memória para algumas coisas:

1) Carregar o próprio programa, pois os executáveis são armazenados no disco e o sistema operacional precisa que os dados do disco sejam carregados em memória. A depender da linguagem, o programa tanto pode ser carregado na memória no seu formato de binário nativo (o caso do C) quanto ser carregado num formato intermediário (bytecode do Java) que será executado numa máquina virtual;

2) Armazenar os dados que serão usados pelo programa, como variáveis, inputs do usuário, arquivos que possam ser carregados;

3) Alguns programas precisam de um runtime, outros passos ou processos que gerenciam os eventos e a memória usada na execução. O Java, por exemplo, tem a sua máquina virtual, que contém, entre outras coisas, um coletor de lixo que gerencia memória não utilizada.

A depender de como o executável final de cada linguagem é executado, ele pode necessitar de mais ou menos memória. Um programa em C vai usar menos memória que um programa Java, pois o C roda diretamente na máquina e o Java usa a máquina virtual.

Existe uma relação entre a CPU e a memória sim. A CPU trabalha com os dados que vem da memória RAM. Antes de fazer suas operações, a CPU carrega os dados da RAM numa memória interna ao processador, pois a comunicação é mais rápida, mas também possui um armazenamento menor. Se você usar uma estrutura de dados tipo uma lista ligada, que usa ponteiros e seus dados podem estar distantes na memória RAM, é possível que o processador não consiga carregar esses dados de forma próxima na sua memória interna, causando mais "buscas" na memória RAM. No caso de Arrays, os dados estão em sequência, então é mais fácil para o processador colocar todos os dados na sua memória interna e evita buscas na RAM.

Alguns links, caso você deseje se aprofundar: https://pt.m.wikipedia.org/wiki/Gerenciamento_de_mem%C3%B3ria (português) https://dev.to/deepu105/demystifying-memory-management-in-modern-programming-languages-ddd (inglês) https://www.amazon.com/Computer-Systems-Programmers-Perspective-2nd/dp/0136108040 (inglês)

Espero ter ajudado. Se tiver dúvida, é só falar.