Na začátku javy byla idea pokrýt všechny služby OS v JavaAPI, od toho se spíš ustoupilo, JavaAPI dnes pokrývá sotva ¼ OS API. Proto se občas můžeme setkat s potřebou volat nativní kód/knihovnu z Javy
Jak volat nativní (Cčkový) kód, co existuje v OS?
- JNI call - deklarace native metody + napsání a zkompilování Cčkové “wrapper” knihovny, pracující s nativním Cčkovou knihovnou
:( Javista musí psát Cčkový Wrapper
:) největší kontrola nad efektivitou a pamětí - JNA - Java Native Access
- com.sun.jna.Structure => mapuje se na Cčkové typedef struct
:) je vidět v Javě
:( obsah se kopíruje z a do JVM paměti při volání metody - com.sun.jna.PointerType - silně typovaný objekt, mapuje se na externí Cčkový objekt v paměti přes pointer
:) efektivní
:( v JVM jako blob
- JEP: Foreign function & Memory API - new in Java 19 (v preview, nutné aktivovat)
- Výhody JNI, JNA
- Výhody ByteBuffer
- jextract - autogenerátor C headers => Java
java.nio.ByteBuffer - alokace paměti OS mimo JVM (obdoba Cčkového malloc)
allocateDirect(int capacity)
public byte get(int index)
public ByteBufffer put(int index, byte data)
Jak psát plošinovku?
- Java + SDL (C)
- Java + Java 2D (Swing lze dost optimalizovat)