O documento discute alocação de memória no Go, explicando como o alocador do Go funciona baseado no TCMalloc. Ele descreve as três categorias de alocação (pequena, grande e minúscula), como as threads usam caches locais e como os objetos são alocados e liberados entre o cache, mcentral e mheap. O GC coleta objetos não utilizados para liberar memória periodicamente.
Funcionamento interno do node.js e boas práticasKirmayr tomaz
Atualmente, o Node.js conquista uma maior popularidade a cada dia. Com tantos frameworks e DOM (Desenvolvimento Orientada a Modinha), acabamos deixando de lado como é seu funcionamento por baixo dos panos, além de práticas que podem afetar a performance de uma aplicação. Afinal, você sabe exatamente o que é o Node.js?. Talk realizada no TDC SP de 2017
https://pt-br.eventials.com/Globalcode/tdc-sp-2017-stadium-quarta-5/
Funcionamento interno do node.js e boas práticasKirmayr tomaz
Atualmente, o Node.js conquista uma maior popularidade a cada dia. Com tantos frameworks e DOM (Desenvolvimento Orientada a Modinha), acabamos deixando de lado como é seu funcionamento por baixo dos panos, além de práticas que podem afetar a performance de uma aplicação. Afinal, você sabe exatamente o que é o Node.js?. Talk realizada no TDC SP de 2017
https://pt-br.eventials.com/Globalcode/tdc-sp-2017-stadium-quarta-5/
Certamente o Java é atualmente uma das linguagens mais usadas e uma das mais populares no mundo, sendo que os seus maiores diferenciais não estão na linguagem e sim na JVM (Máquina virtual Java). Conheça um pouco mais sobre esse motor, seu funcionamento e sua arquitetura para tirar melhor proveito dela em suas aplicações, além de conhecer um pouco sobre a implementação de referência e open source da JVM, o OpenJDK.
Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...Thiago Curvelo
Defesa de dissertação para obtenção do título de Mestre em Informática pelo Programa de Pós-Graduação em Informática da Universidade Federal da Paraíba
Certamente o Java é atualmente uma das linguagens mais usadas e uma das mais populares no mundo, sendo que os seus maiores diferenciais não estão na linguagem e sim na JVM (Máquina virtual Java). Conheça um pouco mais sobre esse motor, seu funcionamento e sua arquitetura para tirar melhor proveito dela em suas aplicações, além de conhecer um pouco sobre a implementação de referência e open source da JVM, o OpenJDK.
Metaheurísticas Aplicadas ao Problema de Designação de Servidores e Clientes ...Thiago Curvelo
Defesa de dissertação para obtenção do título de Mestre em Informática pelo Programa de Pós-Graduação em Informática da Universidade Federal da Paraíba
Livro de conscientização acerca do autismo, através de uma experiência pessoal.
O autismo não limita as pessoas. Mas o preconceito sim, ele limita a forma com que as vemos e o que achamos que elas são capazes. - Letícia Butterfield.
proposta curricular para educação de jovens e adultos- Língua portuguesa- anos finais do ensino fundamental (6º ao 9º ano). Planejamento de unidades letivas para professores da EJA da disciplina língua portuguesa- pode ser trabalhado nos dois segmentos - proposta para trabalhar com alunos da EJA com a disciplina língua portuguesa.Sugestão de proposta curricular da disciplina português para turmas de educação de jovens e adultos - ensino fundamental. A proposta curricular da EJa lingua portuguesa traz sugestões para professores dos anos finais (6º ao 9º ano), sabendo que essa modalidade deve ser trabalhada com metodologias diversificadas para que o aluno não desista de estudar.
Slides Lição 10, CPAD, Desenvolvendo uma Consciência de Santidade, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 10, CPAD, Desenvolvendo uma Consciência de Santidade, 2Tr24, Pr Henrique, EBD NA TV, Lições Bíblicas, 2º Trimestre de 2024, adultos, Tema, A CARREIRA QUE NOS ESTÁ PROPOSTA, O CAMINHO DA SALVAÇÃO, SANTIDADE E PERSEVERANÇA PARA CHEGAR AO CÉU, Coment Osiel Gomes, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, de Almeida Silva, tel-What, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique, https://ebdnatv.blogspot.com/
Slides Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 9, Central Gospel, As Bodas Do Cordeiro, 1Tr24, Pr Henrique, EBD NA TV, Revista ano 11, nº 1, Revista Estudo Bíblico Jovens E Adultos, Central Gospel, 2º Trimestre de 2024, Professor, Tema, Os Grandes Temas Do Fim, Comentarista, Pr. Joá Caitano, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24, Pr Henrique, EBD NA TV, 2° TRIMESTRE DE 2024, ADULTOS, EDITORA BETEL, TEMA, ORDENANÇAS BÍBLICAS, Doutrina Fundamentais Imperativas aos Cristãos para uma vida bem-sucedida e de Comunhão com DEUS, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Comentários, Bispo Abner Ferreira, Com. Extra Pr. Luiz Henrique, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique
Projeto de articulação curricular:
"aLeR+ o Ambiente - Os animais são nossos amigos" - Seleção de poemas da obra «Bicho em perigo», de Maria Teresa Maia Gonzalez
9. Layout de um Processo
9
Text
Data
Heap
BSS
Stack
Program Break
Code
Initialized static variables
Uninitialized static variables
Dynamic allocated variables
Function stack frames
11. Alocação na Heap
● Objetos com tamanho conhecido apenas em tempo de
execução
● C tem malloc e free
● C++ tem new e delete
● Go usa escape analysis e garbage collection
11
23. Alocador Simples
● Pode ser implementado em algumas centenas de LOCs
● Questões não endereçadas
○ Fragmentação
○ Devolver memória para o OS
■ Quando?
■ Como? munmap, madvise...
○ Multi-thread
○ ...
23
25. Thread-Caching Malloc (TCMalloc)
● Implementado originalmente em C pelo Google
● Serve como base para o algoritmo usado pelo Go
● Diminui lock-contention em programas multi-threaded
25
26. TCMalloc
● Cada thread tem um cache local
● Dois tipos de alocação
○ Small allocations (<= 32 kB)
○ Large allocations
26
27. TCMalloc - Small Allocations
● Atendidas pelo cache local da thread
● Tamanho é arredondado para o de uma das classes
27
malloc(965 bytes) ⇒ malloc(1024 bytes)
malloc(1023 bytes) ⇒ malloc(1024 bytes)
28. TCMalloc - Small Allocations
Class 0
Class 1
Class 2
...
Local Thread Cache
28
29. TCMalloc - Small Allocations
Class 0
Class 1
Class 2
...
Local Thread Cache
29
30. TCMalloc - Small Allocations
Class 0
Class 1
Class 2
...
Local Thread Cache
Span
Span
Span
...
Central Free List
Class 1
30
Run of contiguous pagesSpan
31. TCMalloc - Small Allocations
Class 0
Class 1
Class 2
...
Local Thread Cache
Span
Span
Span
...
Central Free List
Class 1
31
32. TCMalloc - Small Allocations
Span
Span
Span
Central Free List
Class X
Span
1 page
2 pages
...
> 255
pages
Span Span
Span Span Span
Span Span
Central Heap
32
33. TCMalloc - Small Allocations
Span
Span
Span
Central Free List
Class X
Span
1 page
2 pages
...
> 255
pages
Span Span
Span Span
Span Span
Central Heap
Span
...
33
Span
34. TCMalloc - Small Allocations
Application Local Thread Cache
Central Free List
Central Heap
4 bytes
N 8-byte
objects
X pages
OS
Y*X pages
34
X pages
N 8-byte
objects
Y*X pages
35. TCMalloc - Large Allocations
● Atendidas pela Heap central
● Tamanho é arredondado para numero de paginas
35
malloc(34 kB) ⇒ malloc(36 kB) ⇒ 9 pages
malloc(33 kB) ⇒ malloc(36 kB) ⇒ 9 pages
50. Go’s Allocator
● Acoplado ao GC e outras partes do runtime
○ Difícil de trocar por outras implementações
● Três tipos de alocação
○ Tiny Allocations (no pointers, size < 16 bytes)
○ Small Allocations (size <= 32 kbytes)
○ Large Allocations
50
51. Go’s Allocator - Large Allocations
51
1 page
2 pages
...
> 255
pages
Span Span
Span Span Span Spanmheap
Busy
Spans Span Span Span
Antes de alocar, mheap faz o sweep do mesmo número de paginas
54. Go’s Allocator - Large Allocations
54
Depois de alocar, dependendo da quantidade de memória em
uso...
● A goroutine pode ter que trabalhar para o GC
● Stop the World
55. Go’s Allocator - Small Allocations
55
P1
mcache
Cada processador lógico (P) tem um cache local (mcache)
P2
mcache
56. Go’s Allocator - Small Allocations
56
P1
P2
mcache
mcache
Cada mcache mantem um span para cada tamanho (size class)
Span
Span
...
class 1
class 2
Span
Span
...
class 1
class 2
58. Go’s Allocator - Small Allocations
58
P1
mcache
mcache retorna o endereço de um objeto livre no span
Span
Span
...
class 1
class 2
Span
59. Go’s Allocator - Small Allocations
59
P1
mcache
mcache pede um novo span para o mcentral dessa size class
Span
Span
...
class 1
class 2
Span
60. Go’s Allocator - Small Allocations
60
P1
mcache
Cada mcentral tem duas listas, empty e nonempty spans
Span
Span
...
...
class 1
class 2
mcentral
mcentral
Span Span
Span Span
61. Go’s Allocator - Small Allocations
61
P1
mcache
Span com objetos livres vai ser entregue ao mcache
Span
...
...
class 1
class 2
mcentral
mcentral
Span
Span
Span Span
62. Go’s Allocator - Small Allocations
62
P1
mcache
mcentral vai tentar fazer sweep de spans vazios
Span
Span
...
...
class 1
class 2
mcentral
mcentral
Span Span
If there are no
nonempty spans….
63. Go’s Allocator - Small Allocations
63
Se nada funciona, mcentral vai pedir um novo span para a mheap
class 0 mcentral
Span Span
mheap
64. Go’s Allocator - Small Allocations
64
mcentral vai dar esse span para a mcache
class 0 mcentral
Span Span
mheapSpan
65. Go’s Allocator - Tiny Allocations
Alocações para objetos sem pointers menores que < 16 bytes
The main targets of tiny allocator are small strings and
standalone escaping variables. On a json benchmark the
allocator reduces number of allocations by ~12% and
reduces heap size by ~20%.
65
66. 66
Go’s Allocator - Tiny Allocations
64 bytes
Allocated Free Allocated Free
● Cada P mantem um objeto de 64-bytes que foi alocado de um
span
● Cada tiny allocation adiciona um subobjeto ao final do objeto
● O GC não sabe sobre esses subobjetos!
67. 67
Go’s Allocator - Tiny Allocations
Allocated Free
mcache
P1
● Pega um novo bloco do mcache ≃ small allocation
● Eventualmente, o GC vai coletar o bloco antigo
FreeP1
mcache
68. Garbage Collector ⇒ Concurrent mark and sweep
68
Go’s Allocator - Sweeping
1. Scan all objects
2. Mark objects that are live
3. Sweep objects that are not live
69. ● Runtime periodicamente devolve memória ao OS
● Devolve spans que foram garbage collected a mais de 5
minutos
● No Linux, usa a syscall madvise(2)
69
Go’s Allocator - Devolvendo memória ao OS
madvise(addr, size, _MADV_DONTNEED)