0Pricing
Kotlin Academy · Aula

Gerenciamento de memória no Kotlin/Native: o novo MM

Explore o novo gerenciador de memória do Kotlin/Native, o coletor de lixo e a propriedade dos objetos.

Gerenciamento de memória no Kotlin/Native: o novo MM é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.

O problema do modelo de memória antigo

O modelo de memória original do Kotlin/Native (anterior à versão 1.7.20) era "imutável por padrão": os objetos precisavam ser congelados antes de atravessar os limites entre linhas de execução. Isso tornava o código multithread complexo e incompatível com a semântica das corrotinas Kotlin.

O novo gerenciador de memória (1.7.20+)

Desde o Kotlin 1.7.20, Kotlin/Native usa um novo modelo de memória com coleta de lixo que reproduz o comportamento da JVM/JS. Por padrão, a mutação de objetos entre linhas de execução é permitida. As APIs freeze() / isFrozen estão obsoletas e não fazem nada.

Projeto do coletor de lixo

O novo MM usa um coletor de lixo de marcação e varredura com parada do mundo, executado em uma linha de execução separada do coletor de lixo. Seu objetivo é minimizar os tempos de pausa e trabalhar de forma incremental. As versões futuras continuarão aprimorando a estratégia do coletor de lixo.

Corrotinas e o novo MM

Com o novo MM, kotlinx.coroutines funciona no Kotlin/Native exatamente como na JVM. Você pode compartilhar estado mutável entre corrotinas usando os mesmos padrões (por exemplo, um campo mutável protegido por Mutex) sem congelá-lo.

val mutex = Mutex()
var counter = 0

suspend fun increment() = mutex.withLock { counter++ }

Segurança de linhas de execução no novo MM

O novo MM não oferece segurança automática para linhas de execução — você ainda precisa sincronizar manualmente o estado mutável compartilhado usando Mutex, AtomicInt, AtomicReference ou confinando o estado a uma única linha de execução por meio dos despachantes de corrotinas.

Operações atômicas no Kotlin/Native

Use kotlin.native.concurrent.AtomicInt, AtomicLong e AtomicReference para operações atômicas sem bloqueio em valores primitivos e referências:

val counter = AtomicInt(0)
fun increment() { counter.increment() }
fun read(): Int = counter.value

Ciclo de vida de objetos e ARC nos destinos Apple

Nas plataformas Apple (iOS/macOS), Kotlin/Native usa ARC (contagem automática de referências) para a interoperabilidade com objetos Objective-C. Os objetos pertencentes ao Kotlin são gerenciados pelo coletor de lixo; objetos ObjC/Swift passados para o Kotlin são adaptados por meio de wrappers compatíveis com ARC.

Vazamentos de memória: o que observar

Problemas comuns de memória no Native: ciclos de retenção entre objetos Kotlin e delegados/closures ObjC, grandes grafos de objetos que não são liberados após o uso e trabalhadores em segundo plano de longa duração que mantêm referências a objetos da interface do usuário. Use o Xcode Instruments para analisar o desempenho nos destinos Apple.

Linhas de execução de trabalho em segundo plano

Use kotlin.native.concurrent.Worker para linhas de execução em segundo plano no nível da plataforma (ou prefira corrotinas com um despachante nativo). Cada Worker tem seu próprio laço de eventos; comunique-se por meio de execute(), que transfere ou compartilha objetos de acordo com as regras do novo MM.

Migrando do MM antigo

Remova todas as chamadas a freeze(), ensureNeverFrozen() e isFrozen. Substitua as soluções alternativas com AtomicReference por propriedades mutáveis comuns protegidas por um Mutex, se necessário. Atualize kotlinx.coroutines para a versão 1.6.4 ou posterior para obter suporte ao novo MM.

Ajuste do coletor de lixo

O coletor de lixo pode ser ajustado por meio de propriedades do sistema ou opções de binário do Kotlin/Native. Para aplicações sensíveis à latência, experimente kotlin.native.gc.collectIntervalMillis. Para dispositivos com memória limitada, reduza o tamanho do heap usando kotlin.native.gc.heapTriggerCoefficient.

Verificação rápida

Qual foi a principal mudança introduzida pelo novo gerenciador de memória do Kotlin/Native (1.7.20+)?

Recapitulação: gerenciamento de memória no Kotlin/Native

Principais aprendizados:

  • Novo MM (1.7.20+): gerenciado pelo coletor de lixo, com objetos mutáveis compartilháveis entre linhas de execução; freeze() não faz nada
  • Ainda é necessária sincronização manual: Mutex, AtomicInt, AtomicReference
  • Os destinos Apple usam ARC para interoperabilidade com ObjC; os objetos Kotlin são gerenciados pelo coletor de lixo
  • As corrotinas funcionam de forma idêntica à JVM no novo MM
  • Remova as chamadas antigas a freeze() ao migrar para o novo MM

Perguntas Frequentes

A aula “Gerenciamento de memória no Kotlin/Native: o novo MM” é grátis?

Sim — o texto completo de “Gerenciamento de memória no Kotlin/Native: o novo MM” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.

O que vou aprender em “Gerenciamento de memória no Kotlin/Native: o novo MM”?

Explore o novo gerenciador de memória do Kotlin/Native, o coletor de lixo e a propriedade dos objetos. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Kotlin Academy?

Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Gerenciamento de memória no Kotlin/Native: o novo MM”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Kotlin Academy?

Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Visão geral do Kotlin/Native: destinos, cadeia de ferramentas e compilação
  2. Gerenciamento de memória no Kotlin/Native: o novo MM
  3. Interoperação com C usando cinterop e arquivos .def
  4. Kotlin/WASM: compilação para WebAssembly no navegador
← Voltar para Kotlin Academy