Wyczerpanie pamięci rodzimej w systemie Windows
Proces systemu operacyjnego, w którym działa wirtualna maszyna języka Java (VM), nie ma wystarczającej ilości pamięci do utworzenia pliku zrzutu.
Czasami maszyna wirtualna może nie wytwarzać pliku zrzutu w systemie Windows, ponieważ nie ma wystarczającej ilości pamięci rodzimej dostępnej dla procesu systemu operacyjnego, na którym działa maszyna wirtualna. Na przykład następujące dane wyjściowe mogą być zapisywane wSTDERR:
Unhandled exception
Type=Segmentation error vmState=0x00000001
J9Generic_Signal_Number=00000004 ExceptionCode=c0000005 ExceptionAddress=707D1A95 ContextFlags=0001003f
Handler1=7064F300 Handler2=7134EF90 InaccessibleAddress=00000000
EDI=01F1FB78 ESI=00000000 EAX=00001388 EBX=003BBA18
ECX=00000000 EDX=01DB0048
EIP=707D1A95 ESP=01F1FB5C EBP=01F1FB68 EFLAGS=00010246
GS=002B FS=0053 ES=002B DS=002B
Module=C:\test\native\OOMCrash\oom.dll
Module_base_address=707D0000 Offset_in_DLL=00001a95
Target=2_60_20110521_082820 (Windows 7 6.1 build 7601 Service Pack 1)
CPU=x86 (2 logical CPUs) (0x12e54d000 RAM)
----------- Stack Backtrace -----------
---------------------------------------
JVMDUMP006I Processing dump event "gpf", detail "" - please wait.
JVMDUMP032I JVM requested System dump using 'C:\test\native\OOMCrash\core.20110525.134230.4148.0001.dmp'
in response to an event
JVMDUMP012E Error in System dump: Dump failed - could not load library DBGHELP.DLLTen błąd może również zostać wyświetlony:JVMDUMP012E Error in System dump: Dump failed - could not begin dump threadBiblioteka DBGHELP.DLL jest wymagana, aby maszyna wirtualna generowała plik zrzutu systemowego w systemie Windows i została udostępniona w pakiecie SDK. Niepowodzenie załadowania tej biblioteki wskazuje, że proces wyczerpał dostępną pamięć rodzimą.
Do wygenerowania pliku zrzutu systemowego w tych okolicznościach można użyć debugera systemu Windows, takiego jak WinDbglub Visual Studio, lub menedżera zadań Windows. Te debuggery ładują wymagane biblioteki w oddzielnym procesie. Może być konieczne wymuszenie zatrzymania maszyny wirtualnej w punkcie awarii w celu uzyskania pliku zrzutu przy użyciu tych debugerów. Jeśli awaria jest awarią, tak jak w poprzednim przykładzie, można ustawić opcję wiersza komend -Xrs . Ta opcja powoduje, że system operacyjny zatrzyma maszynę wirtualną i wyświetli okno dialogowe z systemem Windows po wystąpieniu awarii. Jeśli awaria nie jest awarią, na przykład jeśli maszyna wirtualna produkował plik zrzutu dla wyjątku Java™ , można użyć działania wyzwalającego uśpienia w punkcie śledzenia, aby zatrzymać maszynę wirtualną podczas uzyskiwania pliku zrzutu. Użyj następującej komendy:
java "-Xtrace:print=j9dmp,trigger=tpnid{j9dmp.10,sleep}"