G1 GC распределение огромных объектов - PullRequest
0 голосов
/ 03 сентября 2018

В официальной документации G1 GC, Garbage-First Garbage Collector , есть одна часть, которая говорит так:

Однако существует специальное положение для огромных объектов для массивов примитивных типов, например, bool, всевозможных целых чисел и значений с плавающей запятой.

что означают эти слова? Я не смог найти ни одной ссылки в Google. Разве Java-процесс напрямую помещает это в Поколение Tenured для выделения массивов примитивных типов, я действительно запутался, может ли кто-нибудь мне помочь, это официальное объяснение?

1 Ответ

0 голосов
/ 06 сентября 2018

Массивы этих примитивов рассматриваются как огромные объекты, если размер массива превышает половину области G1 (так же, как и для других объектов). Однако, когда дело доходит до восстановления этих массивов, G1 обрабатывает их по-разному, в том смысле, что он пытается восстановить их во время любого типа паузы сбора. Чтобы сделать это безопасно, сборщик должен проверить любые ссылки на массив, чтобы гарантировать, что к нему больше нельзя получить доступ. Вот почему в документации говорится: «G1 оппортунистически пытается вернуть огромные объекты, если на них не ссылаются многие объекты ...» Это может показаться немного запутанным, потому что вы ожидаете вернуть что-то, только если на него нет ссылок.

Эта ошибка объясняет, как это сформулировано https://bugs.openjdk.java.net/browse/JDK-8048179

Кроме того, этот пост содержит более подробную информацию. https://blogs.oracle.com/poonam/eager-reclamation-of-humongous-objects-with-g1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...