У меня есть вопрос о флаге ClassUnloadingWithConcurrentMark, так как я нигде не нашел полезной помощи. Если мы используем G1GC, по умолчанию установлено значение true (-XX:+ClassUnloadingWithConcurrentMark). Если я использую флаг -XX:-ClassUnloadingWithConcurrentMark, чтобы отключить выгрузку класса после одновременной отметки G1, где тогда выполняется выгрузка класса (какая фаза)? Я где-то читал, что это происходит, когда полный сборщик мусора активируется, что, если полный сборщик мусора никогда не запускается? У меня проблемы с длинными фазами комментариев - выгрузка в приведенном ниже примере заняла более 3 секунд:
2015-06-08T08:09:16.318+0200: 572818.729: [GC remark 572818.729: [Finalize Marking, 0.0002590 secs] 572818.729: [GC ref-proc, 0.4479462 secs] 572819.177: [Unloading, 3.2004912 secs], 3.6499382 secs]
[Times: user=0.20 sys=0.08, real=3.64 secs]
Будет ли мне полезно использовать -XX:-ClassUnloadingWithConcurrentMark для сокращения времени выгрузки классов? Я боюсь, что если я воспользуюсь этой опцией, у меня будет еще больше проблем (например, исключения из памяти,...), если выгрузка класса никогда не произойдет.
РЕДАКТИРОВАТЬ: если мы используем -XX:+ClassUnloadingWithConcurrentMark (опция по умолчанию), запускается ли выгрузка класса каждый раз, когда происходит фаза замечания GC? В журналах у меня есть некоторая GC с причиной GC: Порог GC метаданных, но у других нет этой причины, но выгрузка все еще происходит на этапе примечания. Почему это так?