digital-garden/source/доклады/Прокачка от 17 до 21. Большое путешествие к новой Java LTS.md

68 lines
3.6 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
---
tags:
- зрелость/🌱
date: "[[2023-10-09]]"
zero-link:
2024-09-01 20:44:54 +03:00
- "[[../../garden/ru/meta/zero/00 Разработка]]"
2024-06-13 21:01:37 +03:00
author: "[[Олег Чирухин]]"
source: "[[Joker 2023]]"
---
- ==Виртуальные потоки==
- Теперь есть метод для переворачивания List
- Паттерн матчинг
- 32 битная винда больше не поддерживается
Для каждой спецификации создаются тесты. Если на спецификацию нельзя создать спеку, то спецификация переписывается так, чтобы создать тест было можно.
Все вендеры, которые хотят называться Java (JDK) должны пройти эти тесты.
Шаблон для JEP
![](Pasted%20image%2020231009162108.png)
Теперь можно не создавать Main класс. На самом деле класс создается в момент компиляции.
![](Pasted%20image%2020230927184548.png)
jep 430. Интерполяция строк.
![](Pasted%20image%2020231009162656.png)
Record pattern
Java 8
![](Pasted%20image%2020231009162850.png)![](screen%205.png)
![](screen%206.png)
jep441
![](screen%207.png)
![](screen%208.png)
![](screen%209.png)
Scoped Values вместо ThreadLocal
По факту те же ThreadLocal только с четко ограниченной областью действия.
![](screen%2010.png)![](screen%2011.png)![](screen%2012.png)![](screen%2013.png)![](screen%2014.png)
Generational ZGC
Научился работать с поколениями.
Хранит их в разных местах.
Будет чаще собирать молодые поколения.
Пример написания Java Agent
![](screen%2015.png)![](screen%2016.png)
Virtual Thread
Проблема старых тредов в том, что они базируются на обычных тредах ОС
![](screen%2017.png)![](screen%2018.png)![](screen%2022.png)
Количество платформенных потоков ограничено количеством потоков ОС. Есть ThreadLocal. Они подходят для выполнения любых задач. Но они ограничены по ресурсам, и чтобы они заканчивались нужно заморочится.
Виртуальный поток не привязан к конкретному потоку ОС. При вызове блокирующей операции Java останавливает этот поток, до момента пока его можно будет вызвать. То есть мы освобождаем настоящий поток ОС, чтобы он не простаивал.
В виртуальных потоках не рекомендуется использовать ThreadLocal.
Подходят для выполнения задач, которые часто находятся в состоянии блокировки. Не подходят для выполнения длительных вычислений и систем в реальном времени.
![](screen%2031.png)![](screen%2032.png)
В Quarkus есть аннотация для запуска на виртуальных потоках @RunOnVirtualThread
![](screen%2033.png)
Пока ресурсов железа хватает никакой разницы нет. Когда железо заканчивается, то виртуальные треды начинают отрабатывать быстрее (раза в 2-3).