Sun GC максимальный порог - PullRequest
       0

Sun GC максимальный порог

3 голосов
/ 07 августа 2010

Есть вопрос о Sun GC.В FAQ по Sun (старый для 1.4.2) говорится, что коллектор пропускной способности не использует параметр MaxTenuringThreshold (MTT).Используется только для CMS.http://java.sun.com/docs/hotspot/gc1.4.2/faq.html

(12) Что мне делать, если в моем приложении есть средне или долгоживущие объекты?

  • Объекты, которые выживают в коллекции молодого поколения, имеют копированиестоимость (частью алгоритма для коллекции молодого поколения является копирование любых объектов, которые выживают).Средне или долгоживущие объекты могут быть скопированы несколько раз.Используйте параметр -XX MaxTenuringThreshold для определения стоимости копирования.Используйте -XX: MaxTenuringThreshold = 0, чтобы немедленно переместить объект, который сохранился в коллекции молодого поколения, в штатное поколение.Если это улучшает производительность приложения, копирование долгоживущих объектов является значительным. Обратите внимание, что сборщик пропускной способности не использует параметр MaxTenuringThreshold .

Я не знаю, как это проверить, но если это правда, как сборщик пропускной способности определяет, когда продвигать молодые объекты в постоянное поколение?Это делается каждый раз, когда молодое поколение заполняется (другими словами, МТТ = 0?).

Ответы [ 2 ]

0 голосов
/ 01 марта 2013

Проверка исходного кода OpenJDK 1.6 для psScavenge.cpp (= -XX:+UseParallelGC = сборщик пропускной способности), мы находим

if (AlwaysTenure) {
    _tenuring_threshold = 0;
} else if (NeverTenure) {
    _tenuring_threshold = markOopDesc::max_age + 1;
} else {
    // We want to smooth out our startup times for the AdaptiveSizePolicy
    _tenuring_threshold = (UseAdaptiveSizePolicy) ? InitialTenuringThreshold :
                                                MaxTenuringThreshold;
}

В этом случае (OpenJDK 1.6) MaxTenuringThreshold не используется только при активации -XX:+UseAdaptiveSizePolicy. Затем вместо этого используется начальное значение по умолчанию 7 .

ИМХО, предложение, выделенное жирным шрифтом, означает, что JDK 1.4.2 будет использовать максимальное значение по умолчанию / вычисленное значение, чтобы определить, когда следует продвигать молодые объекты.

Если вы хотите проверить значения, вы можете использовать -XX:+PrintTenuringDistribution

 Desired survivor size 48286924 bytes, new threshold 10 (max 10)
 - age   1:   28992024 bytes,   28992024 total
 - age   2:    1366864 bytes,   30358888 total
 - age   3:    1425912 bytes,   31784800 total
0 голосов
/ 07 августа 2010

Если вы говорите о современном (1.6.0) Sun GC, вы можете скачать исходный код и сами поработать точно , что происходит. Но, конечно, поведение может меняться с разными уровнями патчей.

Вот некоторые более свежие документы, которые ссылаются на опцию -XXmaxTenuringThreshold:

и различные подсказки отображаются в поиске Google. Но я не могу найти какую-либо конкретную документацию или окончательный ответ на ваш вопрос в Интернете.

...