Piszemy dużą aplikację GUI w Scali z wieloma klasami i musieliśmy zwiększyć przestrzeń PermGen, aby móc załadować wszystkie klasy. Sama aplikacja pokazuje serię ekranowych działań, z których każda ładuje swój własny duży zestaw klas. Tylko jedna czynność jest kiedykolwiek załadowana/wyświetlana w dowolnym momencie. Po przejściu kilku czynności, mieliśmy OutOfMemoryError
w przestrzeni PermGen.Zapisywanie przestrzeni PermGen przy użyciu wielu programów ładujących klasy
Rozumiem, że przestrzeń PermGen to garbage collected just like the rest of the heap, ale jestem zainteresowany, czy mogę zmniejszyć wymaganą przestrzeń PermGen przez posiadanie np. jeden na jedną aktywność, aby umożliwić rozładunek klasy.
Więc:
- Rozumiem, że klasy ładowane przez classloader system nie może zostać rozładowane, ponieważ będą one zawsze odwoływać ich ładującego klasy. Czy to prawda?
- Pod warunkiem, że nie ma więcej wystąpień klasy załadowanej przez mój niestandardowy moduł ładujący klasy, a moduł ładujący klasy może być zbędny, czy jego klasy zostaną rozładowane, zwalniając przestrzeń PermGen?
- Czy są jakieś zastrzeżenia dotyczące (lub typowych błędów, które uniemożliwiałyby) rozładunek klasy?
Jak duży jest twój PermGen? –
128m to za mało, na razie działa 256m, ale jak długo? ... –