No Gizmodo apareceu um interessante artigo sobre os programas chamados de task killers no Android. Eles são programas que fecham outros programas…como o Gerenciador de Tarefas do Windows, muito usado para fechar programas que não estão mais respondendo.

Qual é a utilidade de programas assim? Para um usuário consciente, apenas matar processos que, por qualquer motivo, não estejam mais respondendo. Para um usuário não muito bem informado, liberar memória RAM.

Todos que usam Linux já devem ter visto que muitas vezes a memória do computador está totalmente ocupada. E nem por isso o sistema está mais lento. No meu notebook, neste momento, estou com cerca de 500MB livres, de um total de 4GB. Mas na prática, em uso mesmo, tenho apenas 1.2GB. O que é essa diferença?

O Linux (e portanto o Maemo, MeeGo e também Android) possui um sistema extremamente eficiente de gerenciamento de memória. Ele sempre tentará usar toda a memória disponível para deixar o próprio sistema mais rápido. A “mágica” acontece ao utilizar a memória que “sobra” para buffers* e caches** e também não remover imediatamente bibliotecas que já foram utilizadas.

Então assim que você fecha um programa, nem tudo dele é removido da memória. Qual é a vantagem disso? Quando você for abrir de novo esse programa, se já houverem coisas dele na memória, o seu carregamento será mais rápido.

O sistema operacional vai liberando memória conforme a necessidade. Não há porque liberar tudo de uma vez se você pode ter um ganho com isso. Portanto memória cheia, no caso do Linux, não é sinal claro de problema!

No N900 há uma forma fácil de ver como está o uso da memória: o programa htop (ele está no repositório extras). Ao ser executado, a segunda linha mostra o uso da memória. O normal será a barra estar completamente cheia. Mas o que efetivamente está em uso é apenas a “primeira” (a verde). A barra azul e a laranja/amarela mostram os buffers e caches, respectivamente.

O Conky sempre mostrará a quantidade de memória efetivamente em uso (a barra verde do htop).

Já o comando top, que é um irmão menor do htop (e é um programa nativo da base do Linux, portanto pré-instalado no N900 também) sempre mostrará a memória total em uso (a soma das 3 barras).

Só a título de curiosidade, esses programas assassinos existem no Android porque ele foi feito de tal forma que quando o usuário fecha um programa, ele não está sendo efetivamente fechado, mas apenas suspenso e colocado em segundo plano. Quando o sistema precisar de memória, o próprio sistema sozinho efetivamente fechará o programa.

No N900, quando se fecha um programa, ele é fechado de verdade! 🙂

* Para explicar o que é um buffer podemos fazer uma analogia com uma impressora. Quando você manda imprimir algo em muitas folhas, você não vai até a impressora e fica colocando folha por folha no alimentador, e também não fica pegando folha impressa por folha impressa. Existe um lugar onde fica uma certa quantidade de folhas em branco, para serem usadas, e existe um lugar para onde o que foi impresso vai, esperando ser recolhido. Cada um desses lugares é um buffer. É um lugar de armazenamento temporário, ou um lugar utilizado apenas de passagem.

** Um cache é uma região onde ficam coisas que já foram usadas e, talvez, possam vir a ser usadas de novo. Um exemplo bem nítido é o navegador: quando você acessa um site ele guarda imagens, folhas de estilos, e até textos em arquivos. Ao visitar esse site novamente o seu carregamento é muito mais rápido pois muitos elementos já estão no disco localmente.