2012-07-30 10 views
5

Ponieważ nowo utworzony obiekt jest przydzielany do nowej generacji. Czy jest możliwe, aby nowo utworzony obiekt był przydzielany bezpośrednio do starego lub stałego pokolenia? jeśli tak, to na jakich bazach?Czy obiekt może być tworzony w starym pokoleniu?

+0

Nie powinno się martwić ani dbać o to, jak działa śmieciarz. – Wug

Odpowiedz

8

Patrz "Frequently Asked Questions about Garbage Collection in the HotspotTM JavaTM Virtual Machine":

Do obiektów kiedykolwiek przeznaczono bezpośrednio do starego pokolenia?

W 1.4.1 tam dwie sytuacje, w których podział może wystąpić bezpośrednio do starej generacji.

Jeśli alokacja nie powiedzie się w młodym pokoleniu, a obiekt jest dużą tablicą , która nie zawiera żadnych odniesień do obiektów, może być przydzielona bezpośrednio do starej generacji. W niektórych wybranych przypadkach strategia ta miała na celu uniknięcie zbędnego generowania nowej generacji przez alokację ze starego pokolenia.

nie jest flaga (dostępny w 1.4.2 i później) L-XX: PretenureSizeThreshold =, które mogą być ustawione w celu ograniczenia wielkości alokacji w młodym pokoleniu. Każda alokacja większa niż niż ta nie będzie podejmowana w młodym pokoleniu, a więc zostanie przydzielona ze starej generacji.

Rozmiar progu dla 1) to słowa 64k. Domyślny rozmiar dla PretenureSizeThreshold wynosi 0, co oznacza, że ​​w młodym pokoleniu można przydzielić dowolny rozmiar .

W przypadku 1.4.2 1) próg słowa 64k nadal jest prawdziwy dla inkrementalnego kolektora (-Xincgc). Dla domyślnej kolektorem a równoczesne kolektor (-XX: + UseConcMarkSweepGC) wartości progowej został zmieniony tak, że próba przeznaczyć do starego pokolenia występuje tylko wtedy, gdy wielkość alokacji jest większy niż cały młodego pokolenia (dostępne miejsce, gdy jest puste). Zaobserwowano, że w przypadkach, w których strategia 1.4.1 dla domyślnego kolektora zbierającego i kolektora współbieżnego prowadziły do ​​pełnych kolekcji, tylko (nie były wykonywane żadne zbiory młodej generacji). Uznaliśmy, że wystarczająco źle, aby podnieść próg.

+0

rozumiem. Dzięki. :) –

+1

to nie jest absolutnie absolutnie, wyślij tutaj: http://stackoverflow.com/questions/24618467/size-of-huge-objects-directly-allocated-to-old-generation/24618819?noredirect=1#comment38154886_24618819 –

Powiązane problemy