Страницы

Поиск по вопросам

суббота, 11 апреля 2020 г.

Структура, архитектура JVM(внутреннее устройство), от .java до .jar? [закрыт]

#java

                            
             
                
                    
                        
                            Закрыт. Данный вопрос необходимо конкретизировать. Ответы
на него в данный момент не принимаются.
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он был сосредоточен только на одной проблеме, отредактировав его.
                        
                        Закрыт 4 года назад.
                    
                
        

Здравствуйте, Возникла необходимость и желание понять внутреннее устройства JVM.
То как создаётся байт код и то что он является входной информацией JVM машины, я
понимаю. 
Но после того, как он поступает в JVM, для меня глухой лес.
Как я нагуглил, там имеется верификатор байт-кода, сборщик мусора, менеджер безопасности,
интерпретатор /JIT компилятор.
Как они работают, в какой последовательности, и как взаимодействую мне не понятно.
Гуглил, искал, читал по частям, но нигде не нашёл схемы или сути того как это выглядит
по шагам всё вместе.
Буду вам благодарен, если объясните, расскажите.
Также если имеются какие либо статьи с описанием этого процесса или книги, буду вам
благодарен за наводки.
Спасибо за внимание.
    


Ответы

Ответ 1



на вход JVM подается classpath - список директорий и jar-файлов, где искать классы, и имя стартового класса. JVM находит класс-файл стартового класса и загружает его, то есть раскладывает по компонентам (основные компоненты - методы, константы и статические переменные), верифицирует (проверяет, что байткод удовлетворяет многочисленным ограничениям, например не модифицирует указатели и не использует целые в качестве булевских), инициализирует статические переменные и запускает метод main(String[]). Методы сначала исполняются интерпретатором. Если интерпретатор обнаруживает, что метод используется часто, то он передает его JIT'у, получаеет нативный код и в дальнейшем вызывает его. Если во время исполнения встречается ссылка на другой класс, этот класс точно также загружается, верифицируется и инициализируется. Все остальное - детали.

Комментариев нет:

Отправить комментарий