Czy wersja java 8 potrafi zwracać zarezerwowana pamięć do systemu operacyjnego gdy juz nie potrzebuje takiej póli czy dopiero od wersji 12 jest to możliwe?
Doprecyzuj pytanie :) w ogólności - tak, potrafi
Chodzi mi oto ze np odpalam apke z przydziałem max 8gb pamięci. Podczas dużego obciążenia vm javy zarezerwowała dla siebie ten max i pytanie czy jak obciążenie spadnie i apka bedzie potrzebowala juz tylko 1gb to czy virtualna maszyna javy zwróci to 7gb do systemu operacyjnego co finalnie apka bedzie konsumowala tylko 1gb ramu komputera
chodzi mi o ten pomarańczowy obszar jak widac na początku zarezerwował 2gb pozniej wyczyscił pamięć prawie do zera i jedzie na bardzo niskim poziomie i czy ten pomaranczowy zarezerwowany i wolny obasz zostanie zwrocony ?
https://stackoverflow.com/questions/30458195/does-gc-release-back-memory-to-os
Podejście, w którym proces JVM zwraca pamięć do OS może spowodować problemy wydajnościowe, np. skoki czasów odpowiedzi aplikacji, jeśli zachodzi akurat resize heapa - raczej niezalecane podejście. A jaki jest Twój use case?
ogólnie interesuje mnie czy java 8 to potrafi i robi to automatycznie, bo jakiś czas temu czytałem gdzieś artykuł że potrafi dopiero od wersji 11/12 jak dobrze pamiętam. I jakoś mnie naszło na zweryfikowanie tego a nie potrafie nigdzie znaleźć konkretów
A co jak zwróci do OS, jakiś inny program ją zajmie, i potem już nie będzie jak znowu wziąć tej pamięci dla javy? xd
Słuszna uwaga, ale głównie chodziło mi tylko o to czy jest to możliwe w wersji 8. Czytając stacka podesłanego przez Charles_Ray widzę że 8 to potrafi przy użyciu G1 ale trzeba to ręcznie wywołać, natomiast od wersji 12 robi to automatycznie gdy aplikacja się nudzi.