O enigma da RAM: de quanta RAM realmente precisamos?

À medida que os dispositivos Android começam a avançar para 6 GB de RAM, temos que nos perguntar: de quanta RAM realmente precisamos? Acompanhe enquanto exploramos!

Recentemente, recebemos anúncios de um dos primeiros smartphones rodando Android que vem com 6 GB de RAM.

6 malditos GB! Isso é muita RAM em um dispositivo móvel.

Iniciar o jogo dos números é o Vivo Xplay5 Elite. A Vivo, como empresa, pode não ser muito conhecida fora da China, mas a empresa, para seu crédito, já fabricou alguns smartphones muito finos no passado. Com o Xplay5 Elite, eles tentaram encaixar muitas especificações em um dispositivo que pretende estar entre os reis.

O Vivo Xplay 5 Elite apresenta uma tela QHD Super AMOLED de 5,43" de curva dupla em uma estrutura metálica para o corpo. No interior, está o mais recente SoC Qualcomm Snapdragon 820 com clock de 2,15 Ghz, GPU Adreno 530, 6 GB de RAM LPDDR4 e 128 GB de armazenamento não expansível. Para a câmera, a traseira é um sensor Sony IMX298 de 16MP com f/2.0 e a frontal é um sensor de 8MP. Tendo em mente essas especificações e a construção metálica do dispositivo, não deveria ser surpresa que custaria bastante, mesmo para o consumidor chinês. Com um preço de CNY 4.288 (US$ 660), este é certamente um carro-chefe chinês, e não um mid-ranger acessível.

O Vivo Xplay5 Elite não é o único smartphone no momento com 6 GB de RAM. Um OEM chinês menos conhecido e recém-fundado, Vernee, tem como objetivo trazer maior acessibilidade do consumidor a quantidades gigantescas de RAM, lançando um dispositivo de médio alcance, o Vernee Apollo.

O Vernee Apollo virá com o SoC topo de linha da MediaTek, o Helio X20. Haverá os já mencionados 6 GB de RAM, 128 GB de armazenamento interno, uma câmera traseira Sony IMX230 de 21 MP e uma tela 2K de 5,5 ". Com tudo isso, o Apollo custaria US$ 399,99. As informações de imprensa que nos foram enviadas não mencionavam o preço chinês ou os mercados-alvo, portanto o telefone ainda é um pouco misterioso.

Ambos os telefones nos imploram para fazer a pergunta: será que realmente preciso tanta RAM agora?

Para responder a esta pergunta, temos que entender como o Android lida com o gerenciamento de memória e RAM. Mishaal fez um trabalho fantástico ao explicar as complexidades do gerenciamento de memória do Android em um artigo anterior, que ainda mantém sua relevância seis meses depois.

"A forma como o Android lida com o gerenciamento de memória é assim: em vez de encerrar imediatamente todos os processos após o término de sua atividade (como quando você pressiona o botão home para sair de um aplicativo), o processo é mantido na memória até que o sistema precise eliminá-lo para liberar mais memória. Como o sistema decide quais processos manter e quais eliminar? O driver LMK (Low Memory Killer). Cada processo recebe um valor oom_adj variando de -17 a 15 pelo serviço ActivityManager, que ajusta dinamicamente o valor oom_adj dependendo da importância do processo. Valores mais altos de oom_adj significam que o processo tem maior probabilidade de ser eliminado para liberar memória, enquanto valores mais baixos significam que o processo tem menos probabilidade de ser eliminado."

"O Android categoriza cada processo em cinco categorias (primeiro plano, visível, serviço, segundo plano e vazio), variando do mais importante ao menos importante para continuar em execução. Os processos pertencentes a cada categoria são eliminados em diferentes níveis de memória livre restante (chamado de valor LMK minfree). Por exemplo, se os valores LMK minfree do seu dispositivo estiverem definidos como “2560.4090.6144.7168.8192” (listados como páginas de 4k, que podem ser lidas em /sys/module/lowmemorykiller/parameters/minfree), então o seu dispositivo eliminará processos definidos como ‘Vazio’ quando sua memória livre cair abaixo de 32 MB, processos definidos como ‘Em segundo plano’ quando a memória livre estiver abaixo de 28 MB e aplicativos em primeiro plano quando a memória livre cair abaixo 10 MB (Deus me livre!) Agora, esses valores minfree não são típicos na maioria dos dispositivos atualmente, já que os fabricantes adoram ajustá-los de acordo com sua preferência, dependendo de como eles acham que melhor se adapta ao seu dispositivo. Mas o que você deve aprender com esta breve explicação é que quanto mais memória livre você tiver, menor será a probabilidade de ver processos críticos sendo eliminados."

Como Mishaal menciona, os valores reais variam de OEM para OEM, então você pode ter experiências variadas com multitarefa em diferentes telefones com especificações semelhantes. Outra variável no mix é a quantidade de bloatware no dispositivo. UXs Android fortemente modificados, como TouchWiz, tendem a incluir muitos recursos além do Android com base no estoque AOSP e, como tal, exigem que muito mais recursos sejam alocados para que o sistema funcione no nível desejado pelo OEM isso para. Isso deixa menos espaço para aplicativos de terceiros serem armazenados em cache, o que, por sua vez, agrava a eliminação de pouca memória.

Majoritariamente Macio

"A principal diferença entre um dispositivo com 2 GB de RAM e um dispositivo com 3 GB de RAM é que o dispositivo com 3 GB de RAM deve ser capaz de armazenar em cache mais processos em segundo plano sem acionar o driver LMK para eliminá-lo."

Portanto, teoricamente, mais RAM disponível no nível do hardware deveria levar a mais processos permanecendo em cache no nível do sistema operacional e a um pool maior do qual o OEM poderia participar. Porém, na maioria das vezes, mesmo em dispositivos com 2 GB de RAM, você vê muito mais RAM livre, mesmo depois que o sistema e os aplicativos estão bloqueados no que precisam. Aqui está a mesma galeria da postagem de Mishaal, comparando a RAM livre em vários dispositivos:

Como você pode ver, dispositivos com interfaces de usuário mais leves, como o Nexus 5 e o Nexus 6, têm a maior proporção de RAM livre disponível no dispositivo. Mesmo o mais pesado de todos, o Samsung Galaxy Note 5 com 4 GB de RAM e TouchWiz para inicializar, possui cerca de 1,7 GB de RAM disponível para cache de aplicativos. Mesmo com um conjunto tão grande de RAM livre, o Note 5 sofria de problemas de multitarefa, onde o dispositivo recorria ao manuseio agressivo de memória. Isso ocorreu por causa da escolha dos valores LMK pelo OEM: adicionar mais RAM no nível do hardware não ajudará! A correção para a Nota 5 para melhorar a multitarefa envolveu o ajuste desses valores LMK para serem mais multitarefa amigável do que as configurações de estoque da Samsung, o que é irônico para um dispositivo focado em produtividade. Como tal, apenas ter mais RAM não tornará o dispositivo automaticamente mais amigável para multitarefa.

Voltando à galeria novamente, parte da RAM livre exibida já é usada para cache de processos do aplicativo, mas parte dela permanece ociosa sem fazer nada. Aqui estão algumas capturas de tela do meu OnePlus One mostrando a RAM livre exibida e, em seguida, a divisão em RAM em cache e RAM ociosa:

Mesmo no pequeno momento em que levei cerca de 1 segundo para sair de um jogo ativo e selecionar a opção de exibir processos em cache, o sistema funcionou para reduzir a RAM real usada. Isso aconteceu porque o jogo, NFS No Limits neste caso, teve uma mudança de prioridade, passando de um processo em primeiro plano para um processo em segundo plano. Isso foi feito com o objetivo de manter o sistema operacional fluindo suavemente em todos os momentos, já que a RAM sob uso ativo mudou de 2,5 GB para 1,9 GB, enquanto o processo do jogo NFS No Limits era armazenado em cache. À medida que a prioridade do jogo mudou, agora ele pode ser eliminado se o sistema operacional realmente precisar de mais RAM livre. Não há interação do usuário necessária aqui.

O objetivo deste exemplo foi destacar como o gerenciamento de memória do Android evoluiu para ser mais eficiente na priorização do sistema e de todos os seus processos. Existem tantos aplicativos que permanecerão em cache a qualquer momento: idealmente, o sistema operacional não usa toda a RAM livre nos processos de cache. Uma parte da RAM livre fica ociosa. Isso ocorre por design, para ocasiões em que um processo pode precisar aumentar seu uso de RAM muito rapidamente.

Também existe um limite de alocação de RAM para processos de aplicativos, conforme definido novamente pelo OEM para telefones individuais. De acordo com um postagem de discussão antiga por Dianne Hackborn, engenheira do Android Framework, há um limite no Pilha Java onde os objetos Java residirão antes do início da coleta de lixo, mas mesmo isso pode ser estendido com o uso inteligente do NDK. Em palavras simples, isso significa que há um limite máximo de RAM disponível para qualquer aplicativo que queira ser executado naquele dispositivo. Para dispositivos mais antigos, esse heap foi definido para 24 MB, mas em dispositivos recentes, o tamanho foi aumentado graças ao aumento da RAM nos dispositivos, bem como ao aumento da demanda de hardware. Android Documento de definição de compatibilidade para Android 6.0 menciona (Seção 3.7) os valores mínimos que esses heaps devem ser definidos pelo OEM. Para efeito de comparação, meu OnePlus One no CM12.1 possui um limite de 192 MB para heaps normais de VM Dalvik e permite até 512 MB para aplicativos que especificam Android: largeHeap=true no manifesto do aplicativo. Teoricamente, um único aplicativo só pode usar até 512 MB de RAM no meu dispositivo. Além disso, a coleta de lixo será iniciada para manter o fluxo livre de outros processos necessários do sistema.

Agora combine o limite de tamanho de heap para aplicativos com valores LMK atribuídos a eles com base em sua prioridade e no A insistência do sistema operacional em manter uma certa quantidade de RAM livre ociosa, e você pode imaginar como a multitarefa do Android funciona. É um mecanismo complexo que envolve muitas variáveis ​​entre o hardware, o software e o próprio aplicativo; ajustado para permitir que até mesmo os dispositivos mais básicos funcionem e, ao mesmo tempo, permitir que o melhor dos carros-chefe tire vantagem absoluta de seu potencial, teoricamente. Na prática, este não é um mundo perfeito, então nada disso acontece. Isso significa que não há garantia de que um dispositivo com 4 GB de RAM funcionará da mesma forma que outro com 4 GB de RAM. Nem significa que um GB extra de RAM além de um determinado limite proporcionará um aumento diretamente proporcional na multitarefa e no manuseio de memória.

O prático e o futuro

Então, voltando à pergunta original, você realmente precisa de 6 GB de RAM em seus dispositivos no início de 2016? Para mim, a resposta é não.

A maioria dos dispositivos que possuo possui 3 GB de RAM LPDDR3 e um deles possui 4 GB de RAM. E simplesmente não há diferença perceptível no desempenho quando se trata de multitarefa. Aqui está uma demonstração multitarefa da minha análise recente do OnePlus X, um dispositivo com 3 GB de RAM e uma ROM Android quase disponível:

O dispositivo não teve problemas para alternar entre 12 aplicativos (13 se você contar o gravador de tela ativo) sem precisar encerrar nenhum desses aplicativos. Não houve recarga nem redesenho, e essa experiência permanece surpreendentemente consistente durante o uso diário, sem reinicializações ou eliminação manual do aplicativo. Um consumidor normal simplesmente não precisa alternar ativamente entre esses vários aplicativos durante o uso prático!

Mas e se o usuário desejar alternar entre esses vários jogos? Concordo que os fatores mencionados acima entrariam em jogo para permitir alternar entre apenas alguns jogos, na melhor das hipóteses. Nessa condição, ter mais RAM física permitiria que o dispositivo armazenasse mais jogos passivamente na memória. Mas um contraponto a essa vantagem é que muitos jogos costumam recarregar-se à força na multitarefa! Sua intenção é evitar que mecanismos de trapaça manipulem os dados do jogo enquanto o jogo está em execução, de modo que recarregar/ressincronizar/atualizar força as verificações de integridade a entrarem em ação novamente. A intenção deles é diferente, mas isso faz com que muitos jogos sejam candidatos inadequados para multitarefa.

Existem ainda mais alguns fatores que impediriam você de aproveitar toda aquela gloriosa RAM. Se você encontrar uma tarefa/várias tarefas combinadas que exijam todos os 6 GB de RAM LPDDR4 do seu dispositivo, você terá um gargalo muito maior na forma do SoC móvel. É verdade que o Snapdragon 820 e o Helio X20 podem ser os principais processadores de suas respectivas empresas, mas ainda são SoCs móveis. Como tal, eles têm outras limitações, como geração de calor, dissipação de calor, estrangulamento térmico e bateria vida, o que os tornaria escolhas ruins para tarefas intensivas o suficiente para usar tanta RAM por um período prolongado de tempo. Nesses casos, é melhor usar um sistema que não foi feito para ser segurado em suas mãos; aquele que tem limites mais liberais quanto ao calor que pode gerar e à energia que pode consumir.

No final do dia, não importa quanta RAM livre você tenha, os aplicativos ainda serão excluídos. É assim que funciona o gerenciamento de memória. Ainda há vantagens em aumentar a RAM, como um aumento adicional no tamanho do heap que ajudará alimentando ativos de bitmap em telas de resolução mais alta, o que nos permite ir além das resoluções QHD em nossos dispositivos. Um tamanho de heap aumentado como tendência em todo o mercado levará a aplicativos que podem aspirar a fazer mais. A menos que a RAM seja bloqueada como intocável, sempre haverá algum uso para ela. Mas considerando que as telas aparentemente oscilam entre 1080p e 1440p nos carros-chefe, podemos ver 4 GB como um padrão razoável por mais um ou dois anos.

Como conclusão, podemos responder à pergunta: será que realmente preciso tanta RAM agora? Não, nós não. Para dispositivos que têm o preço como um dos fatores que precisam ser mantidos baixos, 3 GB ou 4 GB de RAM seriam bastante úteis. Para carros-chefe com demanda de usuários que não se importam tanto com os preços, não faria mal nenhum à prova futura. Como cliente, observe que você ainda não usará toda essa RAM.

O que você acha de telefones com 6 GB de RAM? Deixe-nos saber seus pensamentos nos comentários abaixo!