2016-11-04 3 views
0

Ich möchte dies verstehen, aber wenn ich Max Heap-Größe festlegen, erstellt jeder Thread in einer Multithread-Umgebung ihren eigenen Heap und hat die gleiche Größe?Wird Heap für mehrere Threads freigegeben?

+2

Der Heap wird unter allen Threads geteilt – TheLostMind

+1

Ja, es ist unter allen Threads geteilt https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html – user3159253

Antwort

3

... erstellt jeder Thread in einer Multithread-Umgebung einen eigenen Heap und hat dieselbe Größe?

Nein. Es gibt einen einzelnen Heap, der von allen Threads im Java-Prozess gemeinsam genutzt wird.

Es ist möglich, eine JVM mit TLABs (lokale Threadzuweisungspuffer) auszuführen, um die Zuordnungskonflikte in einer Multithread-Anwendung zu reduzieren. Dies sind jedoch nur Regionen mit dem Eden-Space des Java-Heaps. Nicht getrennte Haufen. Außerdem werden die Objekte nach Bedarf vom GC nach Bedarf verschoben.

Referenzen:

2

Themen des gleichen Prozess der gleichen virtuellen Speicher und die Heap.

Tatsächlich kann Speichermanager lokale Speicherpools für jeden einzelnen Thread beibehalten. Es versucht, die Pools auszugleichen. Dies geschieht "unter der Haube" als Optimierung und ist für Sie unsichtbar, so dass Threads den gesamten dem Prozess zugewiesenen Heap verwenden.

Verwandte Themen