Zielony Smok - logo witryny

Foreign-Memory Access API = API dostępu do cudzej pamięci.

Podstawa: https://openjdk.java.net/jeps/370

Foreign-memory oznacza tutaj pamięć poza stertą Java.

Język Java pozwalał na alokowanie pamięci poza stertą Java (java.nio.ByteBuffer, sun.misc.Unsafe).
Celem było stworzenie API konkurującego wydajnoscią i bezpieczeństwem z wyżej wymienionymi rozwiązaniami.

Dostęp do zewnętrznej pamięci pozwala na:

  • uniknięcie narzutów nieprzewidywalności zbieraczy śmieci (garbage collector), szczególnie przy obsłudze dużych buforów
  • współdzielenie pamięci przez wiele procesów
  • serializację i deserializację zawartości pamięci przez mapowanie plików na pamięć

Nowe API:

  • pozwala operować na różnych rodzajach pamięci jak natywna (native), utrwalona (persistent) czy zarządzana pamięć sterty (managed heap memory)
  • jest bezpieczne dla JVM
  • zapewnia determinizm poprzez jawność alokacji w kodzie
  • omija ograniczenia bezpośredniej alokacji pamięci w ByteBuffer (ograniczenie do 2 GB, ze względu na używanie indeksowania opartego na intach, kłopoty z uwalnianiem wykorzystywanej pamięci)
  • omija kłopoty z bezpieczeństwem związane z użyciem sun.misc.Unsafe

API znajduje się w w module i pakiecie jdk.incubator.foreign.

Podstawą API są interfejsy: MemorySegment, MemoryAddress, MemoryLayout oraz klasy: MemoryHandles, MemoryLayouts, GroupLayout, SequenceLayout, ValueLayout.

(Wystarczające) przykłady użycia znajdują się W JEP-370 i dokumentacji Oracle.