Мой сервер работает с процессорами 24x2, а куча java составляет примерно 70 ГБ. В какой-то момент после установки новой версии (версия-B) я увидел, что полная сборка мусора занимает около 30 секунд (останавливает все потоки). После включения XX: + ParallelRefProcEnabled обработка слабых ссылок сократилась до 3-6 секунд. Но это всего лишь «сгибание тела», а не лекарство.
2011-03-22T20: 38: 24.276 + 0000: 29540.794: [GC [размещение YG: 5477281 K (7549760 K)] 29540.794: [Повторное сканирование (параллельно), 0,4083780 сек] 29541.203: [обработка слабых ссылок, 3.2855240 сек] 29544.488: [разгрузка класса, 0,0187270 секунд] 29544,507: [очистить таблицы символов и строк, 0,0095530 secs] [1 CMS-примечание: 102801236K (114294784K)] 108278518K (121844544K), 3,7319690 сек] [Время: пользователь = 65,53, системный = 0,14, real = 3,73 секунды]
До версии B (и без флага ParallelRefProcEnabled) обработка слабых ссылок занимала около 1,5 секунд. (Примерно для такой же нагрузки)
Я пытаюсь выяснить, какое изменение было внесено в версию B, которое привело к скачку обработки с 1,5 до 30 секунд. В версии B есть несколько изменений, и нет никаких реальных подозрений, связанных со слабыми ссылками.
Я хочу изменить свой код, чтобы он не влиял на тяжелую обработку слабых ссылок.
Я бы хотел чтобы понять, что именно происходит на этапе «обработки слабых ссылок», чтобы я мог найти подозреваемого или оправдать переписывание кода. Есть ли хороший источник для чтения о том, что именно происходит на этом этапе?
Каковы возможные причины долгой «обработки слабых ссылок»? (Количество экземпляров слабых ссылок, количество объектов, содержащих слабые ссылки, глубина дерева ссылок, на которое слабо ссылаются, ...)
I ' Спасибо, Эрез.