Выбор ответа Middle JVM: память, GC, загрузка классов обновлено
Делегирование загрузчиков
Вопрос
Можно ли подменить java.lang.String, положив свой класс с таким именем в classpath?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Нет: загрузчик сначала спросит родителя, и String возьмёт bootstrap. Модель делегирования: Application загрузчик сначала спрашивает Platform, тот Bootstrap.
Варианты ответа
- Да: classpath приложения проверяется раньше JDK, и свой класс победит
- Да, если класс скомпилирован той же версией javac, что и JDK
- Нет: загрузчик сначала спросит родителя, и String возьмёт bootstrapправильный ответ
- Нет, потому что String объявлен final и подменить его нельзя
Разбор
Модель делегирования: Application загрузчик сначала спрашивает Platform, тот Bootstrap. Bootstrap находит String в модуле java.base и загружает его, до classpath дело не доходит. Кроме того, определять классы в пакетах java.* запрещено. Модификатор final запрещает наследование, а не подмену класса.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «JVM: память, GC, загрузка классов»
- Сборщик по умолчанию
- Escape analysis
- Этапы загрузки класса
- GC roots
- Области памяти JVM
- Виды ссылок
- Когда объект становится мусором
- Ошибка и область памяти