Java Guru πŸ€“
13.2K subscribers
885 photos
16 videos
750 links
Канал с вопросами ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с собСсСдований!

По сотрудничСству ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @NadikaKir

Канал Π² ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ РКН: https://vk.cc/cJrSQZ

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Как ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€?

UUID (universally unique identifier) – стандарт, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ способ создания ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². ЗначСния Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° основании Ρ‚Π°ΠΊΠΈΡ… источников ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ систСмноС врСмя ΠΈ MAC-адрСс, Π·Π° счСт Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ с достаточной Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‡ΠΈ сгСнСрированными нСзависимо. МоТно с Ρ€Π°Π·Π½Ρ‹Ρ… машин Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… записи с UUID-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ, ΠΈ Π½Π΅ Π±ΠΎΡΡ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°.

UUID Π±Ρ‹Π²Π°Π΅Ρ‚ пяти Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий, вСрсия опрСдСляСт способ создания. Π€ΠΎΡ€ΠΌΠ°Ρ‚ остаСтся ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ: это строковоС ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС 128-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа (Π΄Π²Π° long-Π°), Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ дСфисами Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°:

25b32eaa-3017-4ad7-9224-383f6bfa5212


Π’ Java ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прСдставляСтся ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ классом UUID ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.util. Π’ Π½Ρ‘ΠΌ Π½Π΅Ρ‚ слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ getter-Ρ‹ для описанных Π² стандартС составных частСй, конструктор ΠΈ статичСскиС Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ЕдинствСнный конструктор позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΏΠΎ Π΄Π²ΡƒΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΠΌ значСния (ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ ΠΈ младшиС 64 Π±ΠΈΡ‚Π° Π² Π²ΠΈΠ΄Π΅ long ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²). nameUUIDFromBytes строит ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива Π±Π°ΠΉΡ‚ΠΎΠ² UUID вСрсии 3. randomUUID Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ случайный ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ вСрсии 4, с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ SecureRandom.


Java GuruπŸ€“ #java
πŸ‘10❀3πŸ”₯2🌚1
Π§Π΅ΠΌ IllegalArgumentException Π»ΡƒΡ‡ΡˆΠ΅ Ρ‡Π΅ΠΌ NullPointerException?

Π Π΅Ρ‡ΡŒ здСсь ΠΈΠ΄Π΅Ρ‚ ΠΎ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибки, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π» Π² non-nullable ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null.

ВСхничСски, ΠΎΠ±Π° этих ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ unchecked, ΠΎΠ±Π° ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈ особой Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π½Π΅Ρ‚.

Однако сСмантичСски эти ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. NullPointerException Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‡Π»Π΅Π½Π°ΠΌ класса Ρ‡Π΅Ρ€Π΅Π· null-ссылку. Π­Ρ‚ΠΎ лишь тСхничСскоС описаниС, Π±Π΅Π· ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. IllegalArgumentException, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², явно Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ нСдопустимом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° – это понятная для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ информация.

БСмантичСская Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΈΠ½ΠΎΠ³Π΄Π° проявляСтся ΠΈ тСхничСски. НапримСр, Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΈΠΌΠ΅Π½Π½ΠΎ IllegalArgumentException прСвращаСтся Π² HTTP-ΠΎΡ‚Π²Π΅Ρ‚ с ΠΊΠΎΠ΄ΠΎΠΌ 400 Bad Request, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ NPE остаСтся ΠΎΠ±Ρ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ «нСизвСстной ошибки» 500 Internal Server Error.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ NullPointerException Π½Π΅ трСбуСтся явного ΠΊΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ null. ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ нСизвСстным, ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ Π»ΠΈ Π² этом случаС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ попросту Π·Π°Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

Явная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° null ΠΈ выброс IllegalArgumentException для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, Π° сообщСниС ΠΎΠ± ошибкС Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ Π΅Π³ΠΎ конструктора внСсСт Π΅Ρ‰Π΅ большС ясности.


Java GuruπŸ€“ #java
πŸ‘16❀4πŸ”₯4
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Serial Garbage Collector?

Serial GC β€” это ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ сборщик мусора, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ "Stop-the-World". Он останавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²ΠΎ врСмя сборки мусора ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для ΠΌΠΎΠ»ΠΎΠ΄Ρ‹Ρ… ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ (Young Gen) ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для ΡΡ‚Π°Ρ€ΡˆΠΈΡ… (Old Gen).

🟒 Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

1️⃣ Π’ ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΈ (Minor GC) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π°Ρ стратСгия: Π²Ρ‹ΠΆΠΈΠ²ΡˆΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈΠ· Eden Π² Survivor, Π° ΠΈΠ· Survivor Π² Old Gen.
2️⃣ Π’ старом ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΈ (Major GC / Full GC) выполняСтся ΡƒΠΏΠ»ΠΎΡ‚Π½Π΅Π½ΠΈΠ΅ памяти для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
3️⃣ Π’Π°ΠΊ ΠΊΠ°ΠΊ GC Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Π²ΠΎ врСмя сборки остановка прилоТСния Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Π°.

🟒 Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

β€” Π’ одноядСрных систСмах ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… рСсурсах, Π³Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ GC создаст большС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.
β€” Π’ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… JVM (Π΄ΠΎ 1-2 Π“Π‘ памяти), Π³Π΄Π΅ G1 ΠΈΠ»ΠΈ Parallel GC Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹.
β€” Π’ прилоТСниях Π±Π΅Π· ТСстких Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΠ°ΡƒΠ·Π°ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ… ΠΈΠ»ΠΈ CLI-инструмСнтах.

βœ… Java Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘10❀3πŸ”₯3🌚1
Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ случайноС число Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅

Когда ΠΌΡ‹ сталкиваСмся со случайными числами, Ρ‚ΠΎ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ вопросС ΠΈΡ… распрСдСлСния. НС Π±ΡƒΠ΄Π΅ΠΌ здСсь ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΎΡ€ΠΈΡŽ ΠΌΠ°Ρ‚. статистики, Π° рассмотрим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ практичСскиС слСдствия.

Π‘Π°ΠΌΡ‹Π΅ стандартныС классы-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ случайных чисСл ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распрСдСлСнныС значСния. Π›ΡŽΠ±ΠΎΠ΅ число Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ – это ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π΄Π°Ρ‡. НапримСр, ΠΌΠ΅Ρ‚ΠΎΠ΄ Random.nextInt(1) Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ 0 ΠΈ 1.

Однако, программист Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ "ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ" Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ опСрациями. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ вмСсто ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Random.nextInt(2)%2. Вакая конструкция Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ 0 ΠΈΠ»ΠΈ 1. Однако, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, 2, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π² 0. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΎΡ‚Π²Π΅Ρ‚ 0 Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² Π΄Π²Π° Ρ€Π°Π·Π° Ρ‡Π°Ρ‰Π΅ Ρ‡Π΅ΠΌ 1.

Π­Ρ‚ΠΎ Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ общСпринятым Β«ΡˆΠΊΠΎΠ»ΡŒΠ½Ρ‹ΠΌΒ» арифмСтичСским ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° %. ВмСсто этого слСдуСт ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π±ΠΎΡ‚Ρƒ ΠΎ распрСдСлСнии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ.

Если Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»ΠΎΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с распрСдСлСниями, стоит Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ спСциализированной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π²Ρ€ΠΎΠ΄Π΅ Apache Commons Math.


Java GuruπŸ€“ #java
πŸ‘9πŸ”₯4❀2
Когда стоит Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ char[] вмСсто String?

ΠŸΠ΅Ρ€Π²Π°Ρ, очСвидная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° – оптимизация. Если Π²Π°ΠΌ Π·Π°Ρ€Π°Π½Π΅Π΅ извСстСн Ρ€Π°Π·ΠΌΠ΅Ρ€ строки, ΠΈ ΠΎΠ½ фиксирован, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ массив. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с нСизмСняСмыми подстроками, ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ offset-ΠΎΠ² ΠΎΠ±Ρ‰Π΅Π³ΠΎ массива (ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ сдСлано Ρ€Π°Π½ΡŒΡˆΠ΅ Π² самом String).

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ осознанно ΠΈ своСврСмСнно. JVM Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ усилия ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ строк (Π²Ρ€ΠΎΠ΄Π΅ интСрнирования), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ эффСктивнСС Π²Π°ΡˆΠΈΡ….

Вторая, ΠΌΠ΅Π½Π΅Π΅ очСвидная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° – Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² Java ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ сохраняСтС ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Ρ‚ΠΈΠΏΠ° String, физичСски ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· памяти ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сборщик мусора.

БущСствуСт способ алгоритмичСской Π°Ρ‚Π°ΠΊΠΈ Π½Π° систСму, ΠΊΠΎΠ³Π΄Π° Ρ…Π°ΠΊΠ΅Ρ€ своими дСйствиями Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ памяти, ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ информация ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² heap dump.

Если ΠΏΠ°Ρ€ΠΎΠ»ΡŒ хранится Π² массивС, программист ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Β«Π·Π°Π½ΡƒΠ»ΠΈΡ‚ΡŒΒ» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послС использования.


Java GuruπŸ€“ #java
πŸ”₯14πŸ‘8❀4
Под ΠΊΠ°ΠΊΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ?

Π’ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ соврСмСнных вСрсий Java для этих Ρ†Π΅Π»Π΅ΠΉ Π΅ΡΡ‚ΡŒ Π΄Π²Π° класса:

Period – ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π΄Π½Π΅ΠΉ, мСсяцСв ΠΈ Π»Π΅Ρ‚. Одним Π΄Π½Π΅ΠΌ здСсь считаСтся дСнь Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ZonedDateTime.

Duration – Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ наносСкунд, сСкунд, ΠΌΠΈΠ½ΡƒΡ‚, часов, ΠΈ Ρ‚ΠΎΠΆΠ΅ Π΄Π½Π΅ΠΉ. Π—Π΄Π΅ΡΡŒ ΠΎΠ΄ΠΈΠ½ дСнь – Ρ€ΠΎΠ²Π½ΠΎ 24 часа.

Оба класса Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс TemporalAmount – ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅. Оба ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹, ΠΈ ΠΊΠ°ΠΊ слСдствиС, потокобСзопасны. Π›ΡŽΠ±Π°Ρ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ опСрация Π²Ρ€ΠΎΠ΄Π΅ plusX() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

ЭкзСмпляры ΠΎΠ±ΠΎΠΈΡ… классов ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ созданы ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΈΠ· Π΄Π²ΡƒΡ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ between, ΠΈΠ»ΠΈ ΠΈΠ· строки. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠ΅ прСдставлСниС Duration: "P2DT3H4M", Period: "P1Y2M3D".

Π”ΠΎ Java 8 основным способом хранСния ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π±Ρ‹Π»ΠΈ числовыС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹. Π’ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ нСдостатков, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Π½Π΅Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ Π² Java 8+ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ числом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ between() Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ элСмСнта Π΅Π½Π°ΠΌΠ° ChronoUnit.


Java GuruπŸ€“ #java
❀7πŸ‘3πŸ”₯3
new String("Hello_42") == "Hello_" + 42?

Π’Π°ΠΊΠΈΠ΅ вопросы ΠΎ сравнСнии строковых ΠΈ числовых констант ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ знания ΠΎ понятии ΠΏΡƒΠ»ΠΎΠ² Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² (literal pool). НС слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с ΠΏΡƒΠ»ΠΎΠΌ констант класса. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для строкового Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ класса, Ссли Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ Π² ΠΊΡƒΡ‡Π΅. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ "Hello" == "Hello" истинно, Π½Π΅ смотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ String – ссылочный Ρ‚ΠΈΠΏ. Вакая оптимизация Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° благодаря свойству нСизмСняСмости (immutable) класса String, ΠΈ называСтся ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк.

ΠšΡ€ΠΎΠΌΠ΅ самих Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ примСняСтся ΠΊΠΎ всСм константным выраТСниям. К Ρ‚Π°ΠΊΠΈΠΌ выраТСниям Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ относятся нСявноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ числа 42 ΠΊ строкС ΠΈ конкатСнация констант. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ истинным "Hello_42" == "Hello_" + 42.

ΠŸΡƒΠ» Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° явно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ new String("Hello_42") == "Hello_" + 42 Π»ΠΎΠΆΠ½ΠΎ.


Java GuruπŸ€“ #java
πŸ‘16πŸ”₯6❀5
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Java ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ссылкС ΠΈΠ»ΠΈ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ?

Π­Ρ‚ΠΎΡ‚ вопрос ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ корнями Π² C++ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅ (скорСС всСго ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽΠ΅Ρ€Π°), это тСрминология ΠΈΠ· C++. Для Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² этой Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.

Π’ C++ ссылка – это пСрСмСнная-псСвдоним для Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. МСняя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ссылки, помСняСтся ΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π». Π’ Java Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚, Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ это ΠΏΠΎΠ΄ΡƒΠΌΠ°Π² Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎ ссылкС Π½Π° int.

Бсылка Π² Java – это Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² памяти. ΠŸΠΎΡ…ΠΎΠΆΠ°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Π² C++ называСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ – это ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ значСния Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. По ссылкС – ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ссылки, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ сути использованиС Ρ‚ΠΎΠΉ ΠΆΠ΅ самой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’ Java ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – всСгда копия. Π—Π½Π°Ρ‡ΠΈΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ всСгда ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, просто это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ссылкой Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Код Π²Ρ‹ΡˆΠ΅ это дСмонстрируСт.


Java GuruπŸ€“ #java
πŸ”₯12πŸ‘5❀3
КакиС Π² Java Π±Ρ‹Π²Π°ΡŽΡ‚ Π²ΠΈΠ΄Ρ‹ ссылок?

ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ТСсткой ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ссылок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ сборщиком мусора особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π­Ρ‚ΠΎ наслСдники класса java.lang.ref.Reference. ВсС ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° слабыС ссылки. ВСхничСски это ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ доступСн ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ get(), ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ сборщиком мусора ΠΏΠΎΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π΅Ρ‰Π΅ Π½Π΅ ΡƒΠ΄Π°Π»Π΅Π½. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ для экономии памяти, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ кэшСй, для Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… рСсурсов. НапримСр Π² Android слабыС ссылки ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π±ΠΎΡ€ΡŒΠ±Ρ‹ с ΡƒΡ‚Π΅Ρ‡ΠΊΠΎΠΉ Activity.

Π’ΠΈΠ΄Ρ‹ ссылок Π² порядкС убывания «ТСсткости»:

πŸ”˜ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ТСсткая ссылка – любая пСрСмСнная ссылочного Ρ‚ΠΈΠΏΠ°. ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡΡ сборщиком мусора Π½Π΅ Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ станСт Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ (пСрСстанСт Π±Ρ‹Ρ‚ΡŒ доступной ΠΈΠ· GC roots, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… постах).
πŸ”˜SoftReference – мягкая ссылка. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ станСт ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ израсходования всСй памяти – Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ Π΄ΠΎ возникновСния OutOfMemoryError. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π½ΡŒΡˆΠ΅, зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сборщика мусора.
πŸ”˜WeakReference – слабая ссылка. Π‘Π»Π°Π±Π΅Π΅ мягкой. НС прСпятствуСт ΡƒΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, сборщик мусора ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ссылки.
πŸ”˜PhantomReference – фантомная ссылка. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для «прСдсмСртной» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ доступСн послС Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΡ‡ΠΈΡ‰Π΅Π½ сборщиком мусора.

Java GuruπŸ€“ #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘12πŸ”₯4❀3
Какой ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ Π² ΠΊΠΎΠ΄Π΅?
πŸ‘2
Из Ρ‡Π΅Π³ΠΎ состоит .class-Ρ„Π°ΠΉΠ»?

.class-Ρ„Π°ΠΉΠ» прСдставляСт собой ΠΎΠ΄ΠΈΠ½ скомпилированный класс. Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ исполняСт Java Virtual Machine. Π’ .class компилируСтся ΠΊΠΎΠ΄ любого JVM языка, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ Π½Π΅ зависит ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ класса ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ javap ΠΈΠ· стандартного Π½Π°Π±ΠΎΡ€Π° JDK. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ структура Ρ„Π°ΠΉΠ»Π° описана Π½Π° Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ, Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π²ΠΎ мноТСствС статСй. Π€Π°ΠΉΠ» состоит ΠΈΠ· 10 сСкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ условно Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹:

πŸ”˜ Бвойства Ρ„Π°ΠΉΠ»Π°: ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° «волшСбноС слово» 0xCAFEBABE ΠΈ вСрсия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°;
πŸ”˜ ΠŸΡƒΠ» констант – содСрТит всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ классов Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΈ ΠΏΡ€ΠΎΡ‡ΡƒΡŽ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… мСстах ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылки Π½Π° элСмСнты ΠΏΡƒΠ»Π°;
πŸ”˜ ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свойства класса: Ρ„Π»Π°Π³ΠΈ доступа, имя этого класса, Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΊΠ°, интСрфСйсов;
πŸ”˜ Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ содСрТимоС: список ΠΏΠΎΠ»Π΅ΠΉ класса ΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
πŸ”˜ Атрибуты класса;

Для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов Ρ‚ΠΎΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с названиями Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° OuterClass$InnerClass.class. Если класс Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ, вмСсто ΠΈΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½ΠΎΠΌΠ΅Ρ€Π° с 1.


Java GuruπŸ€“ #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘10❀6πŸ”₯4
Бколько памяти Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚?

Π Π°Π·ΠΌΠ΅Ρ€ экзСмпляров ссылочных Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ JVM ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΅Π΅ запуска. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² вопросС подразумСваСтся самая популярная машина – HotSpot ΠΎΡ‚ Oracle.

Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ»Π΅ΠΉ-ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π±Ρ‹Π²Π°ΡŽΡ‚ большС Ρ‡Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² цСлях выравнивания (alignment). Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ выравнивания ΠΌΠ΅ΠΆΠ΄Ρƒ полями Π² памяти ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ пустоты.

Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ссылка Π² Java – Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² C++, это Π½Π΅ адрСс Π² памяти. Из-Π·Π° этого Ρ€Π°Π·ΠΌΠ΅Ρ€ поля-ссылки ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ машинного слова, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ³Π΄Π° HotSpot ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ «сТатиС ссылок» (Compressed OOP).

ΠšΡ€ΠΎΠΌΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² HotSpot начинаСтся с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° – runtime-ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚ 8 Π΄ΠΎ 16 Π±Π°ΠΉΡ‚.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° строго большС суммы Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅ΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° измСряСтся срСдствами инструмСнтации.


Java GuruπŸ€“ #java
πŸ‘14πŸ”₯6❀5
На ΠΊΠ°ΠΊΠΈΠ΅ области дСлится ΠΏΠ°ΠΌΡΡ‚ΡŒ JVM?

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ особСнности HotSpot (ΠΈ Π΅Ρ‘ opensource-вСрсии OpenJDK). Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Android) всё ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. ΠžΠ±Π»Π°ΡΡ‚ΠΈ-поколСния ΠΊΡƒΡ‡ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ зависят ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сборки мусора, ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

🟒Stack – мСсто ΠΏΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΈ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½ΠΎ Π½Π΅ сами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹). Π₯Ρ€Π°Π½ΠΈΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ хранятся ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠΊΠ° Ρ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΡƒΡŽΡ‚ΡΡ. ВсС Π΄Π°Π½Π½Ρ‹Π΅ Π² стСкС – GC roots. ΠžΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ΡΡ сразу Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ указываСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ -Xss, Π½ΠΎ ΠΏΡ€ΠΈ создании ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
🟒PermGen – Π’ этой области хранятся Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ классы (экзСмпляры класса Class<T>). Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ с Java 7 хранится ΠΏΡƒΠ» строк. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° -XX:PermSize, растСт динамичСски Π΄ΠΎ -XX:MaxPermSize. НС считаСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΡƒΡ‡ΠΈ.
🟒Metaspace – с Java 8 замСняСт permanent generation. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ metaspace ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ доступной Π½Π° машинС памяти, Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ PermGen ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -XX:MaxMetaspaceSize.
🟒Heap – ΠΊΡƒΡ‡Π°, вся managed-ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранятся всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ВсС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ – части ΠΊΡƒΡ‡ΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -Xms, -Xmn ΠΈ -Xmx ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ…ΠΈΠΏΠ° соотвСтствСнно.
🟒Eden, New Generation, Old Generation ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ – спСцифичныС для сборщика мусора части ΠΊΡƒΡ‡ΠΈ, поколСния. ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅, Π½ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сохраняСтся: Π΄ΠΎΠ»Π³ΠΎ ΠΆΠΈΠ²ΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ постСпСнно двигаСтся Π²ΠΎ всё Π±ΠΎΠ»Π΅Π΅ староС ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅; сборка мусора Π² Ρ€Π°Π·Π½Ρ‹Ρ… поколСниях происходит Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ; Ρ‡Π΅ΠΌ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ ΡΡ‚Π°Ρ€ΡˆΠ΅, Ρ‚Π΅ΠΌ сборка Π² Π½Ρ‘ΠΌ Ρ€Π΅ΠΆΠ΅, Π½ΠΎ ΠΈ Π΄ΠΎΡ€ΠΎΠΆΠ΅.

Π₯отя устройство памяти – это Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, для Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° знания ΠΎ Π½ΠΈΡ… нСсут ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ. Π­Ρ‚ΠΈ знания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² JVM, Ρ‡Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ спасаСт ΠΎΡ‚ просадок ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ GC ΠΈ остановок с OutOfMemoryError.


Java GuruπŸ€“ #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘15πŸ”₯13❀6
ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Shutdown Hooks

Shutdown Hook – это ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ JVM. ДСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° Thread, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Runtime.getRuntime().addShutdownHook().

ΠŸΡ€ΠΈ использовании ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ряд нюансов:
1. НСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π²ΠΎΠΎΠ±Ρ‰Π΅. Π₯ΡƒΠΊΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ – Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ System.exit(). НапримСр Π²Ρ‹Π·ΠΎΠ² System.halt() ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ систСмы SIGKILL ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π΄ΠΎ выполнСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚Π°ΠΊ ΠΈ Π²ΠΎ врСмя. Π‘ΠΈΠ³Π½Π°Π» SIGTERM запустит ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π½ΠΎ ОБ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΠΎΡ€Π²Π°Ρ‚ΡŒ процСсс.

2. Π’ Ρ…ΡƒΠΊΠ΅ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ System.exit(0). Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ System.halt(). Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° послС старта Ρ…ΡƒΠΊΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ зависанию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

3. Набор ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² задаСтся Π΄ΠΎ ΠΈΡ… старта. Когда процСсс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ начался, Π½ΠΎΠ²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² addShutdownHook() Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

4. НСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ ΠΎ порядкС выполнСния. Если ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² нСсколько, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² случайном порядкС, ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Π² сосСдних ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…. Об этом Π½Π°ΠΌΠ΅ΠΊΠ°Π΅Ρ‚ ΠΈ Ρ„ΠΎΡ€ΠΌΠ° объявлСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° – класс Thread.


Java GuruπŸ€“ #java
πŸ‘9πŸ”₯3
МоТно Π»ΠΈ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ Error?

ВСхничСски, Error ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Throwable ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ Π² Π±Π»ΠΎΠΊ catch. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ ΠΈ скомпилируСтся Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, согласно спСцификации, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠ° Error – нСобрабатываСмая ошибка, Π»ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅Ρ‚ смысла.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, выброс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ° VirtualMachineError ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ JVM находится Π² сломанном состоянии. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π° нСпрСдсказуСма: OutOfMemoryError ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСвозмоТности создания Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², StackOverflowError тСряСт Ρ„Ρ€Π΅ΠΉΠΌΡ‹ стСка Π²Ρ‹Π·ΠΎΠ²Π°, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π»ΠΎΠ²ΠΈΡ‚ΡŒ Error Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, объявлСниС Π΅Ρ‘ Π² сСкции throws сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Как ΠΈ RuntimeException, Error – Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ unchecked exception.


Java GuruπŸ€“ #java
πŸ‘13πŸ”₯5❀2
Какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ JDK ΠΈ JRE?

JRE – Java Runtime Environment, Java-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Π­Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ всСго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Java (JVM), Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов (Java Class Library), консольной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ java ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΉ инфраструктуры. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, JRE Π½Π΅ достаточно Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

JDK – Java Development Kit, Π½Π°Π±ΠΎΡ€ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ SDK для Java. JDK Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя JRE, Π½ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ содСрТит компилятор (javac) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ javadoc ΠΈ jdb. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JDK ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ устанавливаСтС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ JRE, Ссли ΠΆΠ΅ Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Java, вмСсто этого Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ JDK.


Java GuruπŸ€“ #java
πŸ‘22πŸ”₯6❀2
Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ package-info?

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚, Π²Ρ‹ создаСтС ΠΏΠ°ΠΏΠΊΡƒ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, ΠΈ Π²ΠΎ всСх Π΅Π΅ .java Ρ„Π°ΠΉΠ»Π°Ρ… добавляСтС Π² Π½Π°Ρ‡Π°Π»Π΅ строчку с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π²ΠΈΠ΄Π° package full.dir.path;. Π­Ρ‚ΠΎΠ³ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ достаточно для Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Однако, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ Π΅Π³ΠΎ объявлСниС – Ρ„Π°ΠΉΠ»
package-info.java. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это .java-Ρ„Π°ΠΉΠ», это Π½Π΅ объявлСниС класса. Π’ Π½Π°Π·Π²Π°Π½ΠΈΠΈ класса дСфисы Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ нСоднозначности Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚.

МинимальноС содСрТимоС Ρ„Π°ΠΉΠ»Π°
package-info.java – всё Ρ‚Π° ΠΆΠ΅ строка package full.dir.path;. Π’Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ нСсСт практичСской ΠΏΠΎΠ»ΡŒΠ·Ρ‹. Π•ΡΡ‚ΡŒ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π² Π½Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ польза появилась.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ – докумСнтация ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Javadoc-ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ – описаниС ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.lang. Π•Π³ΠΎ исходник Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ java/lang/
package-info.java.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ – Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ уровня ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Для этого аннотация Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Target PACKAGE. НапримСр, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Spring Framework ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
@NonNullApi.

Java GuruπŸ€“ #java
πŸ”₯10πŸ‘4❀2
МоТно Π»ΠΈ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€Π΅Ρ„Π»Π΅ΠΊΡˆΠ΅Π½ΠΎΠΌ?

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ – Π½Π΅Ρ‚. Π Π΅Ρ„Π»Π΅ΠΊΡˆΠ½-информация ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° прСдставляСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса Parameter. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡ… свойство name синтСтичСскоС: "arg0", "arg1", ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠœΠ΅Ρ‚ΠΎΠ΄ isNamePresent ΠΏΡ€ΠΈ этом Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΈ нСдоступна. Она Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π΄Π°ΠΆΠ΅ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄.

Начиная с Java 8 Ρƒ компилятора (javac) появилась опция -parameters. Π’ скомпилированный с этой ΠΎΠΏΡ†ΠΈΠ΅ΠΉ класс Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Parameter#getName() Ρ‚ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΆΠ΅ настоящСС имя.

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° информация ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ – Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° JSON сСриализации Jackson. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ конструктора ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΅ΠΉ ΠΊΠ°ΠΊ поля сСриализационной Ρ„ΠΎΡ€ΠΌΡ‹.

Π”ΠΎ появлСния Ρ„Π»Π°Π³Π° -parameters Jackson использовал для этого Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ снабТался Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
@JsonProperty. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»Π°ΡΡŒ строка, которая повторяла имя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π­Ρ‚ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, Π²Ρ‹Π·Π²Π°Π² Method#getParameterAnnotations().

Java GuruπŸ€“ #java
πŸ”₯9πŸ‘5❀2
Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΎΠ±Ρ…ΠΎΠ΄ конструктора?

Π­Ρ‚ΠΎΡ‚ пост – Π½Π΅ рСкомСндация. ОписанноС здСсь ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ основаниС ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ (Ссли ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅).

ДСсСриализация – полагаСтся, Ρ‡Ρ‚ΠΎ сСриализационная Ρ„ΠΎΡ€ΠΌΠ° ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ сконструирована, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠ΅ экзСмпляр просто восстанавливаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° readObject. ВызываСтся конструктор блиТайшСго Π½Π΅ serializable родитСля.

Π’Π½ΡƒΡ‚Ρ€ΠΈ дСсСриализация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ReflectionFactory.newConstructorForSerialization ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° sun.reflect – ΠΌΠ΅Ρ‚ΠΎΠ΄ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ) конструктором. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ всё ΠΆΠ΅ вызываСтся, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ конструктор класса Object.

Unsafe.allocateInstance – нСпосрСдствСнно создаСт экзСмпляр Π½Π΅ вызывая конструктор, Π½ΠΈΡ‡Π΅Π³ΠΎ лишнСго.

Оба способа ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π΅ Π²Ρ‹Π·Π²Π°Π½ Π½ΠΈ конструктор, Π½ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ»Π΅ΠΉ. ВсС Ρ‡Π»Π΅Π½Ρ‹ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ со значСниями ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (null, 0, false). Однако для final поля Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ считаСтся ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΎΠ½ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ установлСно.

ΠŸΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ этими грязными Ρ…Π°ΠΊΠ°ΠΌΠΈ, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅: ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ sun.* Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Π»ΠΈ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ API Java, ΠΈ Π΅ΡΡ‚ΡŒ Π½Π΅ Π²ΠΎ всСх вСрсиях Java.


Java GuruπŸ€“ #java
πŸ‘6❀4πŸ”₯4
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ classpath?

Classpath – это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ прилоТСниям Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ классы. По этому адрСсу Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ всС классы, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ. На мСсто поиска стандартных классов JRE этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ влияСт.

ΠšΡ€ΠΎΠΌΠ΅ нСпосрСдствСнно Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (ΠΊΠΎΠΌΠ°Π½Π΄Π° java), этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ JDK, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ javac, javadoc ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π•ΡΡ‚ΡŒ Π΄Π²Π° основных способа установки classpath: Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния ОБ CLASSPATH, ΠΈ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки -cp (синоним -classpath). Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ позволяСт ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ значСния для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ – тСкущая дирСктория.

Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡƒΡ‚ΠΈ ΠΊ jar-Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈ ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ дирСкториям с ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ. ΠŸΡƒΡ‚ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ символом : Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΈΠ»ΠΈ ΠΆΠ΅ ; Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡƒΡ‚ΠΈ символ *.

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ запускаСтся ΠΈΠ· jar-Ρ„Π°ΠΉΠ»Π° (java -jar), classpath Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ Π² Π΅Π³ΠΎ манифСстС.


Java GuruπŸ€“ #java
πŸ”₯14πŸ‘5❀2