Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅

πŸ•ΈοΈ Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Java: балансируСм Π½Π° Π³Ρ€Π°Π½ΠΈ скорости ΠΈ памяти

НСдавно ΠΌΠΈΡ€ Java обзавёлся Π½ΠΎΠ²Ρ‹ΠΌ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π² восторгС: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌΠΈ рСсурсов! Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ всё Π·Π²ΡƒΡ‡ΠΈΡ‚ идСально. Но Ρ‡Ρ‚ΠΎ происходит, Ссли ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ Π²Π΅Π±-ΠΊΡ€Π°ΡƒΠ»Π΅Ρ€? Π’Π°ΠΊΠΎΠΉ вопрос Π·Π°Π΄Π°Π» сСбС Π°Π²Ρ‚ΠΎΡ€ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π”Π°Ρ€ΠΈΠΎ Π‘Π°Π»ΠΈΠ½Π·ΠΎ, ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ оказался вСсьма Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΏΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π’Π½Π°Ρ‡Π°Π»Π΅ Π”Π°Ρ€ΠΈΠΎ написал простой Π²Π΅Π±-ΠΊΡ€Π°ΡƒΠ»Π΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ классичСскиС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ: Π’ΠΎΠ³Π΄Π° Π°Π²Ρ‚ΠΎΡ€ Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΈΠ½ΠΊΡƒ Java β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ (Virtual Threads): // ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ
ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor(); ΠŸΠ΅Ρ€Π²Ρ‹Π΅ сСкунды экспСримСнта Π±Ρ‹Π»ΠΈ восторТСнными: страницы Π·Π°Π³Ρ€ΡƒΠΆΠ°Π»ΠΈΡΡŒ молниСносно. Но вскорС ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π»: java.lang.OutOfMemoryError: Java heap space Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ «съСли» всю Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ°Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. На самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠΊ
ОглавлСниС
3D-сцСна: ярко-ΠΆΠ΅Π»Ρ‚Ρ‹Π΅ Β«Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΈΡ‚ΠΎΡ‡ΠΊΠΈΒ»-Pac-Man’ы Π²ΠΈΡ…Ρ€Π΅ΠΌ ΠΎΠ±ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ микросхСму памяти с красным Π·Π½Π°ΠΊΠΎΠΌ Β«ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΒ», показывая, ΠΊΠ°ΠΊ быстродСйствиС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ памяти.
3D-сцСна: ярко-ΠΆΠ΅Π»Ρ‚Ρ‹Π΅ Β«Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΈΡ‚ΠΎΡ‡ΠΊΠΈΒ»-Pac-Man’ы Π²ΠΈΡ…Ρ€Π΅ΠΌ ΠΎΠ±ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ микросхСму памяти с красным Π·Π½Π°ΠΊΠΎΠΌ Β«ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΒ», показывая, ΠΊΠ°ΠΊ быстродСйствиС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ памяти.

НСдавно ΠΌΠΈΡ€ Java обзавёлся Π½ΠΎΠ²Ρ‹ΠΌ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Π² восторгС: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌΠΈ рСсурсов! Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ всё Π·Π²ΡƒΡ‡ΠΈΡ‚ идСально. Но Ρ‡Ρ‚ΠΎ происходит, Ссли ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ Π²Π΅Π±-ΠΊΡ€Π°ΡƒΠ»Π΅Ρ€?

Π’Π°ΠΊΠΎΠΉ вопрос Π·Π°Π΄Π°Π» сСбС Π°Π²Ρ‚ΠΎΡ€ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π”Π°Ρ€ΠΈΠΎ Π‘Π°Π»ΠΈΠ½Π·ΠΎ, ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ оказался вСсьма Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΏΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

🧡 ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ vs. Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ: ΠΏΠ΅Ρ€Π²Ρ‹Π΅ впСчатлСния

Π’Π½Π°Ρ‡Π°Π»Π΅ Π”Π°Ρ€ΠΈΠΎ написал простой Π²Π΅Π±-ΠΊΡ€Π°ΡƒΠ»Π΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ классичСскиС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ:

  • πŸ› οΈ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 200) ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ список URL-адрСсов.
  • ⏳ ΠŸΠΎΡ‚ΠΎΠΊΠΈ пСриодичСски ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°ΡŽΡ‚, оТидая ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ сСти.
  • πŸ“Š ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ, Π½ΠΎ Π½Π΅ ΠΏΠΎΡ€Π°ΠΆΠ°Π»Π° Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π’ΠΎΠ³Π΄Π° Π°Π²Ρ‚ΠΎΡ€ Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΈΠ½ΠΊΡƒ Java β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ (Virtual Threads):

// ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ
ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor();

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ сСкунды экспСримСнта Π±Ρ‹Π»ΠΈ восторТСнными: страницы Π·Π°Π³Ρ€ΡƒΠΆΠ°Π»ΠΈΡΡŒ молниСносно. Но вскорС ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π»:

java.lang.OutOfMemoryError: Java heap space

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ «съСли» всю Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ°Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

πŸš€ ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Β«ΡƒΠ»Π΅Ρ‚Π΅Π»ΠΈΒ» Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ памяти?

На самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° оказалась Π½Π΅ Π² самих Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, Π° Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы:

  • 🌐 Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ практичСски устранили простой Π²ΠΎ врСмя оТидания ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ сСти.
  • πŸƒβ€β™‚οΈ Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Ρ€Π΅Π·ΠΊΠΎΠΌΡƒ скачку ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… страниц.
  • πŸ“₯ ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°Ρ‡Π°Π»ΠΈ ΡΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² памяти быстрСС, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΡΡ парадокс: Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ сдСлали систСму Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ быстрой, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° пСрСстала ΡƒΡΠΏΠ΅Π²Π°Ρ‚ΡŒ ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ своСй ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹!

🧯 Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ пСрСполнСния памяти?

Π”Π°Ρ€ΠΈΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» нСсколько простых ΠΈ эффСктивных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ²:

πŸ›‘ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² сСмафор, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ:

public class ControlledVirtualThreadsCrawler {
private final ExecutorService executorService =
Executors.newVirtualThreadPerTaskExecutor();
private final Semaphore concurrencyLimit = new Semaphore(500);

private void downloadAndProcess(String url) {
concurrencyLimit.acquire();
try {
// ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° URL
} finally {
concurrencyLimit.release();
}
}
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ссли Π»ΠΈΠΌΠΈΡ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½, ΠΈ это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ баланс скорости ΠΈ памяти.

⏲️ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости поступлСния Π·Π°Π΄Π°Ρ‡ (rate limiting)

Π’ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… сцСнариях Ρ€Π΅Π΄ΠΊΠΎ трСбуСтся ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ тысячи URL сразу. Если Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ задания постСпСнно, систСма Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ:

  • πŸ“‰ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства запросов Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • πŸ—ƒοΈ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ с постСпСнной Π²Ρ‹Π΄Π°Ρ‡Π΅ΠΉ Π·Π°Π΄Π°Π½ΠΈΠΉ.

πŸ“Œ Π§Ρ‚ΠΎ я вынСс ΠΈΠ· этой истории?

Битуация с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ наглядно дСмонстрируСт Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПО: «НС Π±Ρ‹Π²Π°Π΅Ρ‚ бСсплатных Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉΒ».

  • 🧠 Новый ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ: Π‘ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΈ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ управлСния рСсурсами.
  • βš–οΈ Баланс Π²Π°ΠΆΠ½Π΅Π΅ скорости: Π“ΠΎΠ½ΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π±Π΅Π· оглядки Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ рСсурсы ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ²Π°Π»Π°ΠΌ.
  • πŸ”§ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами β€” ΠΊΠ»ΡŽΡ‡ ΠΊ успСху: Π―Π²Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ (сСмафоры, rate limiting) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСявныС ограничСния старых ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ β€” ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ инструмСнт, Π½ΠΎ для ΠΈΡ… эффСктивного примСнСния Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ старыС стратСгии управлСния рСсурсами большС Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

πŸ—’οΈ Π›ΠΈΡ‡Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅:

Π›ΠΈΡ‡Π½ΠΎ ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ Java двиТСтся Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ β€” Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг Π²ΠΏΠ΅Ρ€Ρ‘Π΄ Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ. Но вмСстС с Π½ΠΎΠ²Ρ‹ΠΌΠΈ возмоТностями Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ приходят Π½ΠΎΠ²Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ придётся явно ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы, Π° это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пСрСосмыслСния старых Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² скором Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π° этапС проСктирования.

πŸ”— ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ:

πŸ“– Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹: