Virtueller z/OS -Speicher
Zur Behebung dieser Probleme müssen Sie wissen, wie C/C + + -Programme wie die JVM virtuellen Speicher unter z/OS®verwenden können. Dazu benötigen Sie Hintergrundinformationen zur Komponente z/OS Virtual Storage Management und zu LE.
Der Prozessadressraum unter 31-Bit z/OS verfügt über eine 24-Bit-Adressierung, die die Adressierung von bis zu 16 MB virtuellen Speicher ermöglicht, und eine 31-Bit-Adressierung, die die Adressierung von bis zu 2 GB virtuellen Speicher ermöglicht. Der Prozessadressraum unter 64 -Bit- z/OS verfügt zusätzlich über 64-Bit-Adressierung, die die Adressierung von mehr als 2 GB virtuellem Speicher ermöglicht. Dieser virtuelle Speicher umfasst Bereiche, die als allgemein definiert sind (adressierbar durch Code, der in allen Adressräumen ausgeführt wird), und andere Bereiche, die privat sind (adressierbar durch Code, der nur in diesem Adressraum ausgeführt wird).
Die Größe von gemeinsamen Bereichen wird durch mehrere Systemparameter und die Anzahl der Lademodule, die in diese gemeinsamen Bereiche geladen werden, definiert. Auf vielen typischen Systemen beträgt der insgesamt verfügbare 31-Bit-Bereich ungefähr 1.4 GB. Aus diesem Bereich werden Speicherressourcen, die von der JVM und ihren Unterkomponenten, z. B. JIT, angefordert werden, durch Aufrufe von malloc() zugeordnet. Zu diesen Ressourcen gehören die nativen Java™ -Bibliotheken, der Java-Heapspeicher (wenn Sie eine 31-Bit-JVM verwenden), die Java-Klassen (wenn Sie eine 31-Bit-JVM oder eine 64-Bit-JVM mit komprimierten Verweisen verwenden), der Speicher, der für JNI-Anwendungscode erforderlich ist, und native Bibliotheken anderer Anbieter.
Eine Java OutOfMemoryError -Ausnahmebedingung tritt normalerweise auf, wenn der Java-Heapspeicher erschöpft ist, kann aber auch auftreten, wenn einer der privaten Speicherbereiche erschöpft ist, z. B. wenn viele Threads vorhanden sind. Wenn eine große Anzahl von Threads verwendet wird, kann nativer Stackspeicher häufig der größte private Speicherbereich sein, da LE für jeden Thread in einer 64-Bit-JVM mindestens 3 MB benötigt. 2.000 Threads führen also zur Zuordnung von 6 GB oder mehr Speicher. Weitere Informationen zu Ausnahmen von OutOfMemoryError finden Sie unter "Empfangen von Ausnahmen von OutOfMemoryError ". Weitere Informationen zur Speicherzuweisung von z/OS finden Sie in der UNIX-Systemdienst-Publikation z/OS Version 2 Release 2 Implementation Redbooks®.