Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
statnice:bakalar:b0b36pjv [2025/05/31 22:53] – [Best practices] zapleka3statnice:bakalar:b0b36pjv [2026/05/23 21:14] (current) – [GC] fix syntax mates1n
Line 1: Line 1:
-==== Programování v jazyce JAVA: vlastnosti a koncepce jazyka. Principy objektového programování. ====+====== Programování v jazyce JAVA: vlastnosti a koncepce jazyka. Principy objektového programování. ======
  
 [[https://fel.cvut.cz/cz/education/bk/predmety/50/10/p5010706.html|B0B36PJV]] [[https://cw.fel.cvut.cz/wiki/courses/b0b36pjv/prednasky|Webové stránky předmětu]] [[https://fel.cvut.cz/cz/education/bk/predmety/50/10/p5010706.html|B0B36PJV]] [[https://cw.fel.cvut.cz/wiki/courses/b0b36pjv/prednasky|Webové stránky předmětu]]
Line 14: Line 14:
 ==== JDK, JRE, JVM ==== ==== JDK, JRE, JVM ====
 Většinu programovacích jazyků je možné rozdělit do dvou kategorií: Většinu programovacích jazyků je možné rozdělit do dvou kategorií:
-  * **kompilované** - program je zkompilovaný do spustitelného souboru, skládá se z nativních procesorových instrukcí, které přímo vykonává procesor a musí být tedy kompilován pro konkrétní architekturu a systém. Mezi tyto jazyky patří například C/C++.+  * **kompilované** - program je zkompilovaný do spustitelného souboru, skládá se z nativních procesorových instrukcí, které přímo vykonává procesor a musí být tedy kompilován pro konkrétní architekturu a systém. Mezi tyto jazyky patří například C/<nowiki>C++</nowiki>
   * **interpretované** - program není zkompilovaný, pro spuštění je nutný jiný program (interpreter), který program při spuštění převádí do nativních procesorových instrukcí, které může počítač vykonávat. Typický interpretovaný jazyk je třeba Python.   * **interpretované** - program není zkompilovaný, pro spuštění je nutný jiný program (interpreter), který program při spuštění převádí do nativních procesorových instrukcí, které může počítač vykonávat. Typický interpretovaný jazyk je třeba Python.
  
Line 64: Line 64:
 Garbage Collector běží na pozadí **JVM**. Běží ve vlastním vlákně (nebo i více vláknech), takže neblokuje běh samotného programu (asynchronní). Drží si seznam všech referencí na data na **heap** a jakmile zjistí, že už žádné reference neexistují, tak data uvolní (dealokuje). Garbage Collector běží na pozadí **JVM**. Běží ve vlastním vlákně (nebo i více vláknech), takže neblokuje běh samotného programu (asynchronní). Drží si seznam všech referencí na data na **heap** a jakmile zjistí, že už žádné reference neexistují, tak data uvolní (dealokuje).
  
-Garbage Collector sice nebude nikdy tak efektivní jako korektní manuální dealokace jako např. v C/C++, ale zjednodušuje psaní programu, jeho udržitelnost a značně snižuje riziko memory leaků kvůli špatným manuálním dealokacím.+Garbage Collector sice nebude nikdy tak efektivní jako korektní manuální dealokace jako např. v C/<nowiki>C++</nowiki>, ale zjednodušuje psaní programu, jeho udržitelnost a značně snižuje riziko memory leaků kvůli špatným manuálním dealokacím.
  
 ==== Profilování a optimalizace ==== ==== Profilování a optimalizace ====
Line 491: Line 491:
 </code> </code>
  
-* `catch` může být více, podle typu výjimky. +  * `catch` může být více, podle typu výjimky. 
-* `finally` se vždy vykoná – i když dojde k výjimce nebo `return`.+  * `finally` se vždy vykoná – i když dojde k výjimce nebo `return`.
  
 ==== Try-with-resources ==== ==== Try-with-resources ====
Line 758: Line 758:
  
   * synchronized – zajišťuje, že kód (kritická sekce) provádí v daném čase jen jedno vlákno   * synchronized – zajišťuje, že kód (kritická sekce) provádí v daném čase jen jedno vlákno
-  * volatile – proměnná může být měněna z více vláken, JVM nezachová její hodnotu v cache+  * volatile – proměnná může být měněna z více vláken, JVM nezachová její hodnotu v cache (když se změní na false - informuje to ostatní vlákna, ale ne jako counter)
   * join() – čeká na dokončení jiného vlákna   * join() – čeká na dokončení jiného vlákna
   * wait() / notify() – vlákna čekají a signalizují si mezi sebou (pouze uvnitř synchronized bloku)   * wait() / notify() – vlákna čekají a signalizují si mezi sebou (pouze uvnitř synchronized bloku)
Navigation

Playground

QR Code
QR Code statnice:bakalar:b0b36pjv (generated for current page)