Foreign-Memory Access API = API dostępu do cudzej pamięci.
Podstawa: JEP-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), szczegolnie 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 pamieć

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.