При многократной перезагрузке Java-плагина классы остаются в Metaspace после сборки мусора. Какое условие нужно проверить первым, чтобы объяснить это поведение?
База Hintsage
JVM и память
Загрузка классов, память JVM, GC, JIT и диагностика.
Практика
Вопросы: JVM и память
Представьте, что после длительного прогрева первый вызов с новым типом Op внезапно выполняется медленнее. Объясните механизм JVM, который может вызвать такой всплеск задержки.
interface Op {
int apply(int x);
}
final class Add implements Op {
public int apply(int x) { return x + 1; }
}
final class Mul implements Op {
public int apply(int x) { return x * 2; }
}
public class Main {
static long run(Op op) {
long sum = 0;
for (int i = 0; i < 10_000_000; i++) sum += op.apply(i);
return sum;
}
public static void main(String[] args) {
Op add = new Add();
for (int i = 0; i < 20; i++) run(add);
System.out.println(run(new Mul()));
}
}
В профиле heap после нескольких полных сборок остаются объекты результатов запросов, хотя локальные ссылки на них давно исчезли. Почему сборщик мусора всё ещё может считать эти объекты достижимыми?
Сервис держит heap ниже установленного лимита, но RSS процесса постоянно растёт после обработки сетевых запросов. Какой механизм JVM может объяснить это расхождение?
Объясните, почему классы с одинаковым полным именем, загруженные двумя независимыми загрузчиками, считаются разными типами в JVM.
Как JVM решает, какие методы переводить из интерпретируемого режима в машинный код?
Как JVM достигает глобальной остановки Java-потоков перед некоторыми операциями виртуальной машины?
На G1 крупные массивы вызывают частые паузы при умеренной заполненности heap. Как размер одного объекта может привести к такому поведению?
Что происходит с короткоживущим объектом, если JIT докажет, что он не покидает метод?
При первом обращении к статическому полю класс неожиданно задерживает поток. Какой этап JVM выполняется перед использованием класса?
Объясните механизм, благодаря которому JVM переводит уже выполняющийся длинный цикл в машинный код, не дожидаясь выхода из метода.
Кэш хранит значения через слабые ссылки, но после сборки мусора часть записей исчезает. Какой механизм JVM делает это возможным?
Зачем JVM фиксирует изменения ссылок из старого поколения в молодое?
В плагинной системе загрузчик одного плагина не находит класс, доступный загрузчику соседнего плагина. Как модель делегации загрузчиков объясняет эту ошибку?
При профилировании видно, что многопоточное приложение создаёт объекты без заметной конкуренции за heap. Как JVM обычно достигает этого?
Увеличение размера heap не устраняет StackOverflowError при глубокой рекурсии. Какой ресурс JVM ограничивает глубину вызовов?
Heap остаётся свободным, но приложение получает OutOfMemoryError: Direct buffer memory. Какой механизм объясняет это расхождение?
После увеличения максимального размера heap приложение стало потреблять больше памяти на те же объекты. Какой механизм JVM может объяснить это изменение?
Объект пережил несколько молодых сборок, но не был перемещён в старое поколение. Какой механизм JVM объясняет это?
Сервис освобождает нативный ресурс через PhantomReference, но ссылка в ReferenceQueue появляется не сразу после потери обычной ссылки. Что JVM гарантирует в этом случае?
Показано 1–20 из 50