68 lines
3.6 KiB
Markdown
68 lines
3.6 KiB
Markdown
|
---
|
|||
|
tags:
|
|||
|
- зрелость/🌱
|
|||
|
date: "[[2023-10-09]]"
|
|||
|
zero-link:
|
|||
|
- "[[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).
|