SlideShare uma empresa Scribd logo
1 de 64
Baixar para ler offline
1530 мая 2019
Максим
Дадеркин
Максим
Дадеркин
автор
Stack
Heap
Old
Generation
Young
Generation
Old
Generation
Minor GC
Full GC
Garbage
Collector
JVM
Shenandoah (JVM)
Newly
allocated
Free
Live data
Live data,
In Collection Set
Live data,
In Collection Set
Updating Refs to
* https://wiki.openjdk.java.net/display/shenandoah/Main
Shenandoah (JVM)
Newly
allocated
Free
Live data
Live data,
In Collection Set
Live data,
In Collection Set
Updating Refs to
* https://wiki.openjdk.java.net/display/shenandoah/Main
Shenandoah (JVM)
Newly
allocated
Free
Live data
Live data,
In Collection Set
Live data,
In Collection Set
Updating Refs to
* https://wiki.openjdk.java.net/display/shenandoah/Main
Shenandoah (JVM)
Newly
allocated
Free
Live data
Live data,
In Collection Set
Live data,
In Collection Set
Updating Refs to
* https://wiki.openjdk.java.net/display/shenandoah/Main
Shenandoah (JVM)
Newly
allocated
Free
Live data
Live data,
In Collection Set
Live data,
In Collection Set
Updating Refs to
* https://wiki.openjdk.java.net/display/shenandoah/Main
V8
V8 (Scavenger)
V8 (Scavenger)
Marking
Sweeping
Compacting
V8 (Scavenger)
Old
Generation
To
Space
From
Space
Young
Generation
V8 (Scavenger)
Old
Generation
To
Space
From
Space
Young
Generation
.NET
.Net
Mark phase
Plan phase
Relocate phase
Compact phase
Sweep phase
.Net
gen0 gen1 gen3gen2
ephemeral
Проблемы GC
Проблемы GC
o Объекты-призраки
Проблемы GC
o Объекты-призраки
o Объект больше не используется,
но GC за ним не пришёл
Проблемы GC
o Объекты-призраки
o Объект больше не используется,
но GC за ним не пришёл
o Непотизм
Проблемы GC
o Объекты-призраки
o Объект больше не используется,
но GC за ним не пришёл
o Непотизм
o Сложность алгоритма
Проблемы GC
o Объекты-призраки
o Объект больше не используется,
но GC за ним не пришёл
o Непотизм
o Сложность алгоритма
o Никого не волнует (*)
Ownership (Владение)
o Каждое значение имеет переменную,
которая ей владеет,
т.е. имеет владельца.
Ownership (Владение)
o Каждое значение имеет переменную,
которая ей владеет,
т.е. имеет владельца.
o Одновременно, у значения может быть
только один владелец.
Ownership (Владение)
o Каждое значение имеет переменную,
которая ей владеет,
т.е. имеет владельца.
o Одновременно, у значения может быть
только один владелец.
o Когда переменная выходит за область
видимости, значение удаляется.
Ownership (Владение)
References and Borrowing
(Ссылки и Заимствования)
References and Borrowing
(Ссылки и Заимствования)
o Обозначаются с помощью &T
References and Borrowing
(Ссылки и Заимствования)
o Обозначаются с помощью &T
o Переменные ссылочного типа не имеют
владения, а значит не влияют на него
References and Borrowing
(Ссылки и Заимствования)
o Обозначаются с помощью &T
o Переменные ссылочного типа не имеют
владения, а значит не влияют на него
o Нельзя изменить данные ссылки
(только чтение)
References and Borrowing
(Ссылки и Заимствования)
o Обозначаются с помощью &T
o Переменные ссылочного типа не имеют
владения, а значит не влияют на него
o Нельзя изменить данные ссылки
(только чтение)
o Передача ссылки в качестве параметра
функции называется заимствование
References and Borrowing
(Ссылки и Заимствования)
o Изменяемые ссылки обозначаются с
помощью &mut T
Правила заимствования
o Область видимости любой ссылки должна
находиться в пределах области
видимости владельца
Правила заимствования
o Область видимости любой ссылки должна
находиться в пределах области
видимости владельца
o Допускается только один из
перечисленных видов заимствования:
Правила заимствования
o Область видимости любой ссылки должна
находиться в пределах области
видимости владельца
o Допускается только один из
перечисленных видов заимствования:
o одна или более неизменяемых ссылок
(&T) на ресурс;
Правила заимствования
o Область видимости любой ссылки должна
находиться в пределах области
видимости владельца
o Допускается только один из
перечисленных видов заимствования:
o одна или более неизменяемых ссылок
(&T) на ресурс;
o ровно одна изменяемая ссылка
(&mut T) на ресурс.
Кому не понятно?!
* https://rufflewind.com/2017-02-15/rust-move-copy-borrow
* https://rufflewind.com/2017-02-15/rust-move-copy-borrow
* https://rufflewind.com/2017-02-15/rust-move-copy-borrow
* https://rufflewind.com/2017-02-15/rust-move-copy-borrow
* https://rufflewind.com/2017-02-15/rust-move-copy-borrow
* https://rufflewind.com/2017-02-15/rust-move-copy-borrow
Полезные ссылки
Rust:
• https://doc.rust-lang.org/book/
• https://github.com/rust-lang/rustlings/
GC алгоритмы в Java/.Net/V8:
• https://wiki.openjdk.java.net/display/shenandoah/Main
• https://github.com/dotnet/coreclr/blob/master/Documentation/botr/garbage-collection.md
• https://v8.dev/blog/trash-talk
Интересные презентации:
• Оптимизация потребления памяти в Java - делаем уборку правильно
• Ходячие объекты-мертвецы, или GC всегда прав
• Orinoco - The new V8 Garbage Collector by Google Developer
• Shenandoah GC: сборщик мусора, который смог
Насорил - убери!

Mais conteúdo relacionado

Mais de Vitebsk Miniq

Mais de Vitebsk Miniq (20)

Apollo GraphQL Federation
Apollo GraphQL FederationApollo GraphQL Federation
Apollo GraphQL Federation
 
Who is a functional tester
Who is a functional testerWho is a functional tester
Who is a functional tester
 
Crawling healthy
Crawling healthyCrawling healthy
Crawling healthy
 
Вперед в прошлое
Вперед в прошлоеВперед в прошлое
Вперед в прошлое
 
CloudFormation experience
CloudFormation experienceCloudFormation experience
CloudFormation experience
 
Learning Intelligence: the story of mine
Learning Intelligence: the story of mineLearning Intelligence: the story of mine
Learning Intelligence: the story of mine
 
Как программисты могут спасти мир
Как программисты могут спасти мирКак программисты могут спасти мир
Как программисты могут спасти мир
 
Использование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложений
 
Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.
 
Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?
 
Красные флаги и розовые очки
Красные флаги и розовые очкиКрасные флаги и розовые очки
Красные флаги и розовые очки
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. Практика
 
Разделяй и властвуй!
Разделяй и властвуй!Разделяй и властвуй!
Разделяй и властвуй!
 
Фреймворк-невиидмка
Фреймворк-невиидмкаФреймворк-невиидмка
Фреймворк-невиидмка
 
One stack to rule them all или "Не всё есть в AppStore"
One stack to rule them all или "Не всё есть в AppStore"One stack to rule them all или "Не всё есть в AppStore"
One stack to rule them all или "Не всё есть в AppStore"
 
Machine Learning with Amazon SageMaker
Machine Learning with Amazon SageMakerMachine Learning with Amazon SageMaker
Machine Learning with Amazon SageMaker
 
Знакомство с MiniQ
Знакомство с MiniQЗнакомство с MiniQ
Знакомство с MiniQ
 
Используем контейнеры, или Не дай заказчику повалить продакшн
Используем контейнеры, или Не дай заказчику повалить продакшнИспользуем контейнеры, или Не дай заказчику повалить продакшн
Используем контейнеры, или Не дай заказчику повалить продакшн
 
Переход на DynamoDB. Есть ли жизнь после MongoDB?
Переход на DynamoDB. Есть ли жизнь после MongoDB?Переход на DynamoDB. Есть ли жизнь после MongoDB?
Переход на DynamoDB. Есть ли жизнь после MongoDB?
 
Разработка в долг
Разработка в долгРазработка в долг
Разработка в долг
 

Насорил - убери!