Ist Off-Heap-Speicher dasselbe wie Stack-Speicher?

vish234

Mitglied
Ich verstehe den Unterschied zwischen Stack- und Heap-Speicher, bin aber in mehreren Blogs auf den Begriff Off-Heap-Speicher gestoßen. Ich habe mir viele YouTube-Videos angesehen, um zu sehen, ob es einen Zusammenhang zwischen Off-Heap-Speicher und Stack-Speicher gibt. Gemäß den allgemeinen Antworten zu diesem Thema von scaler topics bezieht sich Off-Heap-Speicher auf Speicherelemente, die von EHCache verwaltet werden und nicht der Garbage Collection unterliegen. Dieses Konzept ist in Ordnung, aber mein Problem ist, ob Off-Heap-Speicher dasselbe wie Stack-Speicher oder eine separate Sache in der Speicherverwaltung ist.
PS: Wenn sie nicht gleich sind, könnte jemand freundlicherweise erklären, was sie im Detail mit einer grundlegenden Erklärung unterscheidet? Ich lerne immer noch etwas über die Java-Speicherverwaltung.

Moderator Edit: Link zu scaler topics gelöscht (Spam).
 
Zuletzt bearbeitet von einem Moderator:

httpdigest

Top Contributor
"off-heap" in java Kontext (gerade bei NIO) bedeutet, dass es sich hier um Speicher handelt, der nicht von der VM verwaltet wird, also wo z.B. Keine Java Objekte liegen.
Der Speicher ist einfach nur anderer Speicher im Speicherraum des JVM Prozesses. Zum Beispiel ein memory mapped file.
 

httpdigest

Top Contributor
Vielleicht noch etwas ausführlicher, weil ich gerade Lust/Zeit habe:

Die JVM spezifiziert eine eigene virtuelle Maschine durch die Java Virtual Machine Specification (JVMS).

Hier bedeutet der "Stack" jener Speicherbereich, welcher jeweils pro Thread existiert, um "Frames" für Methodenaufrufe (als LIFO- also "Stack"-Datenstruktur) zu verwalten: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.2

Die JVMS macht auch eine Referenz auf "native" bzw. "C" Stacks für die Unterstützung von "native" methods: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.6
Da "native" methods ja keine Java-Methoden sind, sondern durch nativen Code (also direkten Code des physischen Prozessors, auf dem die Java Virtual Machine aufsetzt) implementiert ist, benötigt dieser native Code auch eine Laufzeitumgebung, bzw. zumindest mal einen Hardware-Stack (wenn das von der physischen Maschine unterstützt wird).

Der Begriff "Heap" bedeutet im Kontext dieser Java virtuellen Maschine jener Speicherbereich, der für das Anlegen von Objekten und Arrays reserviert ist und über alle Threads geteilt wird: https://docs.oracle.com/javase/specs/jvms/se17/html/jvms-2.html#jvms-2.5.3

Es gibt nun den Begriff "on-heap" und "off-heap" im Java Kontext.

"on-heap" bedeutet eben genau der Heap, den ich oben angesprochen hatte. Also der "Heap" Speicher der JVM.

"off-heap" bedeutet jener Speicherbereich, der weder JVM-Stack noch JVM-Heap ist. Dieser Art von Speicher wurde für die Interoperabilität/Interop mit nativem Code spätestens seit Einführung der "New I/O" (bzw. kurz "NIO") in Java 1.4 wichtig. Mit dem ByteBuffer gab es nun das erste Mal überhaupt die Möglichkeit, per standardisierter Java API auf Speicherbereiche zuzugreifen, die nicht der Java Heap ist, um z.B. Speicher zwischen einer Java-Anwendung und einer nativen Library effizient zu kommunizieren. Vorher war diese Kommunikation zwar auch möglich, allerdings nur mit JNI Code und explizitem "Pinning" von "on-heap" Speicher, damit etwa der Garbage Collector den Speicher (der in den meisten Fällen zu einem primitiven Java Array gehörte - also wieder einem Java Objekt) nicht "verschiebt".

Mit NIO war es nun möglich, innerhalb von Java einfach mal "off-heap" Speicher zu alloziieren und zu verwenden (lesen/schreiben) bzw. woanders weiterzureichen (z.B. zu einer Schnittstelle einer nativen Library).
Desweiteren besteht mit JNI (welche mit Java 1.4 um einige Funktionen erweitert wurde) auch die Möglichkeit, einen ByteBuffer an Java zu zurückzugeben, der auf eine beliebige Speicheradresse zeigt und eine beliebige Kapazität hat. Dieser Speicherbereich kann theoretisch auch auf den "nativen Stack" bzw. "C Stack" des JVM Prozesses zeigen. Hier kann einfach eine beliebige Adresse verwendet werden.

Dies ermöglichte nun auch, Speicher, der nicht initial von deinem Java-Prozess (per ByteBuffer.allocateDirect()) alloziiert wurde, sondern von einer nativen Library, innerhalb deiner Java Anwendung über die ByteBuffer API zu lesen/schreiben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Stack und Heap Speicher Java Basics - Anfänger-Themen 1
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
B Heap-Speicher wieder freigeben Java Basics - Anfänger-Themen 10
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
G Min und Max heap Java Basics - Anfänger-Themen 1
M Java heap space Fehlermeldung beheben Java Basics - Anfänger-Themen 3
F speicherort stack oder heap Java Basics - Anfänger-Themen 1
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
P Stack, Heap Java Basics - Anfänger-Themen 13
G Heap Space erhöhen (64bit) Java Basics - Anfänger-Themen 45
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
J Array von Objekten, wie schauts im Heap / Stack aus ? Java Basics - Anfänger-Themen 7
V Heap-Sort Java Basics - Anfänger-Themen 0
M Frage zu Stack und Heap Java Basics - Anfänger-Themen 1
H Heap-Auslasung verdoppelt sich schlagartig Java Basics - Anfänger-Themen 3
M Java Arbeitsspeicherverbrauch, Heap Space error korrigieren? Java Basics - Anfänger-Themen 18
H Heap Java Basics - Anfänger-Themen 4
D Java Heap Space Probleme Java Basics - Anfänger-Themen 7
B Stack/Heap Frage Java Basics - Anfänger-Themen 36
C Warning: Type safety: Potential heap pollution via varargs parameter array Java Basics - Anfänger-Themen 5
S Input/Output Java heap space Java Basics - Anfänger-Themen 8
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
B OOP Zwei gleichnamige Objekte auf dem heap Java Basics - Anfänger-Themen 4
H Heap Java Basics - Anfänger-Themen 2
A Java heap space Java Basics - Anfänger-Themen 11
T Out of Memory (Java Heap Space) Java Basics - Anfänger-Themen 9
D java heap space Java Basics - Anfänger-Themen 6
S Java Heap space trotz -Xmx1024 Java Basics - Anfänger-Themen 10
N Heap Dump Java Basics - Anfänger-Themen 23
C 'OutOfMemoryError: Java heap space' Java Basics - Anfänger-Themen 5
E ternärer Heap in Array-Form Java Basics - Anfänger-Themen 6
L heap space, LinkedList umspeichern Java Basics - Anfänger-Themen 15
E begrenzung des platzes im heap Java Basics - Anfänger-Themen 4
D java.lang.outofmemoryerror java heap space bei Hashtable Java Basics - Anfänger-Themen 3
G Frage zur Heap-Belegung Java Basics - Anfänger-Themen 2
neurox java.lang.OutOfMemoryError: Java heap space Java Basics - Anfänger-Themen 18
B java.lang.OutOfMemoryError: Java heap space bei Musikplayer Java Basics - Anfänger-Themen 7
M Java Heap Space durch Übergang von einer Klasse in die ander Java Basics - Anfänger-Themen 3
N Applet Heap vergrößern Java Basics - Anfänger-Themen 10
G warum heap space problem? Java Basics - Anfänger-Themen 6
G heap size vergrößern Java Basics - Anfänger-Themen 6
S memory heap problem Java Basics - Anfänger-Themen 9
V warum heap space überlastung Java Basics - Anfänger-Themen 2
G error wegen heap space Java Basics - Anfänger-Themen 4
M Beadarf ermitteln für Java heap space Java Basics - Anfänger-Themen 4
M Dateien lesen/schreiben und Heap Space Probleme Java Basics - Anfänger-Themen 8
G Aktuelle Heap-Größe auslesen? Java Basics - Anfänger-Themen 3
G Aus Array einen Heap erstellen Java Basics - Anfänger-Themen 5
D suchbaum out of heap space Java Basics - Anfänger-Themen 8
D Heap erweitern Java Basics - Anfänger-Themen 3
R Java heap space Java Basics - Anfänger-Themen 4
E Heap Size einstellen Java Basics - Anfänger-Themen 7
S OutOfMemoryError: Java heap space Java Basics - Anfänger-Themen 6
J Morgen Java-Klausur. Stack, Heap, Method-Area Java Basics - Anfänger-Themen 2
M Java Heap Space während der Laufzeit ändern Java Basics - Anfänger-Themen 2
E fehlermeldung "java heap space" Java Basics - Anfänger-Themen 21
E wieviele objekte am heap?? Java Basics - Anfänger-Themen 14
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
B Wie speicher ich die Outputs einer Methode in ein Array ein? Java Basics - Anfänger-Themen 1
L Frage zum Speicher bei Arrays Java Basics - Anfänger-Themen 7
L Herunterladbares Java Programm in bestimmten Ordner speicher Java Basics - Anfänger-Themen 3
F BufferedImage Speicher Nutzung Java Basics - Anfänger-Themen 2
TheSorm Problem mit Speicher Klasse Java Basics - Anfänger-Themen 3
S Wo speicher ich bilder und sounds ab? Java Basics - Anfänger-Themen 4
TheSorm Kleine Speicher Klasse Java Basics - Anfänger-Themen 24
H Methoden "Leeren" Speicher auf der Festplatte überschreiben Java Basics - Anfänger-Themen 8
C Variablen Speicher von Variablen erhöhen Java Basics - Anfänger-Themen 5
I Werte im Speicher auswerten ohne Umweg über eine Datei Java Basics - Anfänger-Themen 16
H Input/Output ImageIO.load frisst meinen ganzen Speicher weg! Java Basics - Anfänger-Themen 4
R Online-Speicher Java Basics - Anfänger-Themen 7
M Variablen speicher Java Basics - Anfänger-Themen 8
J FileOutputStream aktuelle Speicher Pfad ausgeben Java Basics - Anfänger-Themen 13
L Wieviel Speicher braucht ein Pixel? Java Basics - Anfänger-Themen 14
P Belegt "null" Speicher? Java Basics - Anfänger-Themen 25
T Erste Schritte Speicher läuft voll, Diashow, Images Java Basics - Anfänger-Themen 7
C Soundwiedergabe in einem Thread - Speicher besser bereinigen Java Basics - Anfänger-Themen 3
H warum speicher und läd mien editor nicht? Java Basics - Anfänger-Themen 24
T MysqlConnect und Speicher Java Basics - Anfänger-Themen 8
nabla Speicher voll, mit dem GC geht's daneben? Java Basics - Anfänger-Themen 7
hdi Programmier-Stil : Speicher vs. Quellcode Java Basics - Anfänger-Themen 67
G Button soll Speicher Dialog aufrufen Java Basics - Anfänger-Themen 10
N Probleme mit Input/OutputStreams, Daten im Speicher verwalte Java Basics - Anfänger-Themen 2
D nicht genug speicher - profiling trotz error Java Basics - Anfänger-Themen 5
A Problem mit nicht ausreichendem Speicher Java Basics - Anfänger-Themen 3
K speicher(String a, int b) Java Basics - Anfänger-Themen 14
N Zugriff auf Virtuelles Speicher Java Basics - Anfänger-Themen 18
J Belegter Speicher eines Ordners Java Basics - Anfänger-Themen 2
C args[] als statische Variablen speicher oder wie? Java Basics - Anfänger-Themen 12
S Ringbuffer-Speicher mit einem Textfile Java Basics - Anfänger-Themen 2
A eingabe von jTextField lesen und speicher Java Basics - Anfänger-Themen 5
D Werte in Array speicher Java Basics - Anfänger-Themen 8
M Hilfe: Speicher freigeben? Java Basics - Anfänger-Themen 4
G Speicher als .txt -gibt ein Problem! Java Basics - Anfänger-Themen 6
A Speicher von VM ändern ohne Parameter Java Basics - Anfänger-Themen 3
S Speicher freigeben? Java Basics - Anfänger-Themen 5
T Größe eines Objektes im Speicher Java Basics - Anfänger-Themen 4
G Wieviel Speicher verbraucht ein Array? Java Basics - Anfänger-Themen 7
D Mit Java auf Speicher zugreifen Java Basics - Anfänger-Themen 3
L-ectron-X Speicher freigeben - Garbage Collection Java Basics - Anfänger-Themen 6
S Dasselbe ist nicht das gleiche? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben