Първо трябва да знаете какво лошо може да направи GC на вашата програма. В зависимост от вида на колекторите, които използвате за тенуурирано и старо поколение, съдържанието на регистрационните файлове на GC може да варира. Но като цяло основният извод, който трябва да извлечем от gc регистрационните файлове, е концентриран най-вече до следното:
- Колко време отнемат малките колекции?
- Колко време отнемат основните колекции?
- Каква е честотата на незначителните колекции?
- Каква е честотата на основните колекции?
- Колко възстановява малка колекция?
- Колко възстановява голяма колекция?
- Комбинации от горните
Повечето програми имат много чести незначителни колекции, които изискват около 90-95% от купчината и предават останалото на пространствата на Survivor. Следващите колекции изчистват отново оцелелите с около 80% и по същество само 2% до 4% от вашата действителна незначителна колекция стига до старо поколение и тези цикли продължават, без значение кой Collector използвате.
Сега проблемните области са, когато имате стотици малки по размер незначителни колекции на заявка за приложение или нишка и когато се сумират, те правят значително време най-вече в двуцифрени секунди. Тъй като в съвременните колекционери незначителното преминаване и почистване не спират световните случаи, така че нещо това е поносимо. При Old gen проблемите идват, когато колекционерите работят, но не възстановяват нищо значително. например: обикновено колекторът работи, когато старият генератор е пълен на около 80-85%. Това може да е спиране на световния епизод, тъй като новите данни не могат да бъдат записани в купчина, освен ако купчината има повече място, което вероятно е случаят тук. Така нишките на приложението се поставят на пауза, за да позволят на нишките на GC да почистят първо пространството. но след като колекторът приключи, коефициентът на запълване на купчината не намалява толкова, колкото би трябвало. Доброто оразмеряване трябва да намали купчината ви с повече от 40% наведнъж. Ако това не стане, това означава, че имате нужда от повече купчина, за да запазите вашите дълготрайни обекти.
Така че по същество GC анализът не е нещо „направи го въз основа на набор от предварително дефинирани стъпки“. Това е по-скоро hti и пробен анализ. По-скоро е експеримент, ако зададете първоначалните размери и настройки и след това отбележите или наблюдавате активността на GC и запишете констатациите. След това, да речем, след 8-10 стартирания сравнявате бележките и виждате кое работи за вашето приложение и кое не. Наистина е интересна и тежка работа.
person
Nazgul
schedule
07.12.2014