Как JVM загружает и инициализирует классы
Разбираемся, что происходит с классом до main(): Loading, Verification, Preparation, Resolution и Initialization, когда запускается <clinit> и какие обращения действительно инициализируют класс.
Ищет по статьям, вопросам, темам и тегам.
Начните вводить запрос.
Разбираемся, что происходит с классом до main(): Loading, Verification, Preparation, Resolution и Initialization, когда запускается <clinit> и какие обращения действительно инициализируют класс.
Разбираемся, как JVM находит классы, чем отличаются Bootstrap, Platform и Application ClassLoader, как работает parent delegation и почему один и тот же класс, загруженный разными ClassLoader-ами, становится разными типами.
Разбираемся, зачем Java Memory Model нужна в многопоточном коде, откуда берутся проблемы видимости и data race и какие гарантии дают volatile, synchronized, start() и join().
Разбираемся, как heap, stack, CPU cache и Java Memory Model влияют на видимость изменений между потоками, data race и порядок выполнения Java-кода.
Разбираемся, как создать и запустить поток в Java, чем start() отличается от run(), как работают interrupt(), sleep() и join() и почему порядок выполнения потоков не гарантирован.
Разбираемся, что происходит с классом до main(): Loading, Verification, Preparation, Resolution и Initialization, когда запускается <clinit> и какие обращения действительно инициализируют класс.
Разбираемся, как JVM находит классы, чем отличаются Bootstrap, Platform и Application ClassLoader, как работает parent delegation и почему один и тот же класс, загруженный разными ClassLoader-ами, становится разными типами.
Разбираемся, зачем Java Memory Model нужна в многопоточном коде, откуда берутся проблемы видимости и data race и какие гарантии дают volatile, synchronized, start() и join().
Разбираемся, как heap, stack, CPU cache и Java Memory Model влияют на видимость изменений между потоками, data race и порядок выполнения Java-кода.
Разбираемся, как создать и запустить поток в Java, чем start() отличается от run(), как работают interrupt(), sleep() и join() и почему порядок выполнения потоков не гарантирован.