Spodziewałem się, że Runtime.maxMemory() zwróci dokładnie wartość -Xmx, ale zwróci niższą wartość. Co więc wraca?Runtime.maxMemory() i -Xmx
Odpowiedz
Interpretacja flagi -Xmx jest zależna od maszyny wirtualnej. Niektóre maszyny wirtualne, , w tym HotSpot, wymuszają niższą granicę efektywnej wartości tej opcji. Wniosek CCC nie powinien w powyższy sposób wymieniać flagi -Xmx .
Zwraca maksymalną ilość pamięci, że maszyna wirtualna Java próba wykorzystania, JVM nie może korzystać z całej pamięci zostały zdefiniowane jako -Xmx
parametr tylko sterty.
Określ maksymalny rozmiar w bajtach puli alokacji pamięci. Ta wartość musi być wielokrotnością 1024 większą niż 2 MB. Dołącz literę k lub K, aby wskazać kilobajty, lub m lub M, aby wskazać megabajty. Domyślna wartość to: 23 MB. Górny limit dla tej wartości będzie wynosił około 4000 m na platformach Solaris 7 i Solaris 8 SPARC oraz na 2000 m na platformach Solaris 2.6 i x86, z pominięciem kosztów ogólnych. Przykłady:
-Xmx83886080 -Xmx81920k -Xmx80m
zwraca maksymalną ilość pamięci, że maszyna wirtualna Java spróbuje użyć. Jeśli nie ma wrodzonego limitu, zostanie zwrócona wartość Long.MAX_VALUE.
- 1. Zwiększ Xmx i Xms dla grails run-app
- 2. Co się stanie, gdy ustawimy Xmx i Xms równy rozmiar?
- 3. Prędkość kompromis z -Xms i -Xmx opcji Javy
- 4. Przeczytaj parametry uruchamiania Java JVM (np. -Xmx)
- 5. Zużycie pamięci rozruchowej wzrasta poza opcję -Xmx
- 6. Jak ustawić wielkość sterty Java (Xms/Xmx) w kontenerze Docker?
- 7. Jak zwiększyć intelli 32bit xmx więcej niż 1 GB?
- 8. Jak ograniczyć wykorzystanie pamięci aplikacji Java spakowanej w słoiku (-Xmx prawdopodobnie nie działa) w systemie Windows
- 9. efekt uboczny zwiększania maksymalnego rozmiaru i maksymalnego rozmiaru sterty
- 10. Windows batch & java: Łączenie -XX: Komenda OnOutOfMemoryError i parametry wsadowe
- 11. Jaka jest różnica między parametrami -, -X i -XX w JVM?
- 12. Pobieranie statystyk pamięci w Javie: Runtime vs. MemoryMXBean
- 13. Domyślne wartości pamięci JVM
- 14. Cassandra Vs ScyllaDB Wykorzystanie pamięci
- 15. W kompilatorze GWT zabrakło pamięci. Jak skonfigurować go w IntelliJ?
- 16. Strojenie JVM dla wysokiej alokacji
- 17. Dlaczego Math.sqrt (i * i) .floor == i?
- 18. "İ" .toLowerCase()! = "I"
- 19. CSS "i" i "lub"
- 20. UILabel i numberOfLines i sizeToFit:
- 21. Jack i Jill i destinationDir
- 22. Szyny i przecinak i edytor
- 23. Różnica między (++ i) oraz (i ++)
- 24. SOX i zanikanie i zanikanie
- 25. Dlaczego "int i = i;" prawny?
- 26. multidplyr i group_by() i filter()
- 27. atakujących i (handlowe i) operatora
- 28. Zapytanie "i" Linq i "operatory
- 29. kolby i skalowanie i współbieżności
- 30. Dlaczego i = i + 1 jest szybsze niż i ++?
Czy możesz podać bardziej dogłębny opis? Czy to dlatego, że "maxMemory() powinno zwracać (przybliżenie) pamięć, która jest użyta dla" normalnych "obiektów, i nie powinna zawierać dodatkowej przestrzeni wymaganej przez odśmiecacza (np. Dodatkowej przestrzeni na przetrwanie) i nie powinna włącz do stałego pokolenia. " http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4505762 – LostInComputer
@LostInComputer: Sterty są podzielone na 3 przestrzenie (zmiany w oparciu o implementację jvm), młode, które przeżyły i stały. młody to miejsce, w którym zostaną stworzone nowe obiekty i przeniesione do ocalałego w pierwszym GC. Przeczytaj tę dokumentację http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html – kosa
Rozumiem, że podany przez Ciebie link omawiający, które z tych 3 pokoleń należy uwzględnić podczas raportowania maxMemory(). – kosa