Początkowa alokacja pamięci sterty maszyny JVM [duplikat]

Dec 07 2020

Podałem wartości -Xms i -Xmx jako te same 4 GB. Teraz, kiedy uruchamiam moją aplikację uruchamianą wiosną, zakładałem, że system operacyjny przydzieli 4 GB pamięci zaraz po uruchomieniu aplikacji, ponieważ jest to wartość określona za pomocą argumentu -Xms. Ale kiedy sprawdziłem zestaw rezydentny aplikacji, a także pamięć sterty (używając JMX), widzę, że przydzielona pamięć jest nadal mniejsza niż 1 GB. Czy to oznacza, że ​​system operacyjny niekoniecznie przydziela pamięć określoną za pomocą -Xms.

Z góry dziękuję.

Odpowiedzi

JurajMartinka Dec 07 2020 at 12:23

Nie powiedziałeś, który system operacyjny i który sprzedawca / wersja JVM, ale często system operacyjny alokuje strony leniwie, to znaczy, że nie są one w pamięci RAM („rezydentne”), chyba że są potrzebne. Jeśli Twoja aplikacja faktycznie nie potrzebuje tej pamięci sterty, nie będzie ona rezydentna. Istnieje również „polityka adaptacyjnego rozmiaru”, która może skurczyć się nawet poniżej „-Xms”, jeśli zajętość jest zbyt niska:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc-ergonomics.html