Java Flashcards
Какая основная идея языка?
Ключевой особенностью языка Java является то, что его код сначала транслируется в специальный байт-код, независимый от платформы. А затем этот байт-код выполняется виртуальной машиной JVM (Java Virtual Machine).
Еще одной ключевой особенностью Java является то, что она поддерживает автоматическую сборку мусора.
За счет чего обеспечивается кроссплатформенность?
- Исходный код Java, который мы пишем, будет генерировать своего рода.Class файл, называемый файлом байт-кода
- JVM виртуальной машины Java отвечает за перевод файлов байт-кода на определенные платформы.
Какие преимущества у java?
- независимость от платформы и оборудования (пишут код один раз - не нужно переносить)
- автоматическое управление памятью
- безопасность и надежность( контролируется JVM)
- объектная ориентированность
- большое количество библиотек (фрэймворки)
Какие недостатки у Java?
- меньше быстродействие
- нужно больше памяти
- большой объем для изучения
- постоянное развитие, параллельно существуют новые и устаревшие средства
Что такое JDK? Что в него входит?
JDK = JRE + Development Tools
— это Kit, который предоставляет среду для разработки и выполнения (запуска) Java-программы. JDK — это набор (или пакет), который включает в себя две вещи
- Средства разработки (чтобы обеспечить среду для разработки ваших Java-программ)
- JRE (для выполнения вашей Java-программы).
Java Development Kit - — это среда разработки программного обеспечения, используемая для разработки приложений и апплетов Java. Он включает в себя
- среду выполнения Java (JRE),
- интерпретатор / загрузчик (Java),
- компилятор (javac),
- архиватор (jar),
- генератор документации (Javadoc)
и другие инструменты, необходимые для разработки Java.
Что такое JRE? что в него входит?
JRE = JVM + Library Classes
JAVA RUNTIME ENVIRONMENT
среда выполнения Java
минимально-необходимая реализация виртуальной машины для исполнения Java-приложений. Состоит из JVM и стандартного набора библиотек классов Java.
Что такое JVM?
Виртуальная машина Java исполняет байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java. также называется интерпретатором
Что такое byte code?
байт-код — это компактное представление программы, уже прошедшей синтаксический и семантический анализ. В нём в явном виде закодированы типы, области видимости и другие конструкции. С технической точки зрения байт-код представляет собой машинно-независимый код низкого уровня, генерируемый транслятором из исходного кода.
По форме байт-код похож на машинный код, но предназначен для исполнения не реальным процессором, а виртуальной машиной.
большинство инструкций байт-кода обычно эквивалентны одной или нескольким командам ассемблера.
Байт-код называется так, потому что длина каждого кода операции традиционно составляет один байт.
Что такое загрузчик классов (classloader)
Когда мы пытаемся использовать класс, загрузчик классов загружает его в память.
Различают 3-и вида загрузчиков в Java. Это — базовый загрузчик (bootstrap), системный загрузчик (System Classloader), загрузчик расширений (Extension Classloader).
Что такое JIT?
Just-in-time compilation, компиляция «на лету»), динамическая компиляция
- компилируемые языки (машинный код)
- интерпретируемые языки (код+интерпретатор для платформы)
Java - среднее (байткод+интерпретатор)
JIT-компилятор помогает повысить производительность, компилируя байт-код в машинный код «точно в срок» для запуска.
Что такое сборщик мусора? (Garbage collector)
Сборщик мусора выполняет обнаружение и утилизацию недостижимых объектов, не нуждаясь в управлении приложением
Свойства сборщика мусора
Качественность: каждый собираемый объект должен быть недостижимым.
Полнота: каждый недостижимый объект должен быть собран.
Что такое “мусор”? Мусором считается объект, который больше не может быть достигнут по ссылке из какого-либо объекта. Поскольку такие объекты больше не используются в приложении, то их можно удалить из памяти.
Что такое Heap и Stack память в Java? Чем они отличаются?
Java Heap (куча) используется Java Runtime для выделения памяти под объекты и JRE классы. Создание нового объекта также происходит в куче. Здесь работает сборщик мусора: освобождает память путем удаления объектов, на которые нет каких-либо ссылок. Любой объект, созданный в куче, имеет глобальный доступ и на него могут ссылаться с любой части приложения.
Stack (стек) это область хранения данных также находящееся в общей оперативной памяти (RAM). Всякий раз, когда вызывается метод, в памяти стека создается новый блок, который содержит примитивы и ссылки на другие объекты в методе. Как только метод заканчивает работу, блок также перестает использоваться, тем самым предоставляя доступ для следующего метода. Размер стековой памяти намного меньше объема памяти в куче. Стек в Java работает по схеме LIFO (Последний-зашел-Первый-вышел)
Различия между Heap и Stack памятью:
● Куча используется всеми частями приложения в то время как стек
используется только одним потоком исполнения программы.
● Всякий раз, когда создается объект, он всегда хранится в куче, а в памяти
стека содержится лишь ссылка на него. Память стека содержит только
локальные переменные примитивных типов и ссылки на объекты в куче.
● Объекты в куче доступны с любой точке программы, в то время как стековая
память не может быть доступна для других потоков.
● Стековая память существует лишь какое-то время работы программы, а
память в куче живет с самого начала до конца работы программы.
● Если память стека полностью занята, то Java Runtime бросает исключение
java.lang.StackOverflowError. Если заполнена память кучи, то бросается
исключение java.lang.OutOfMemoryError: Java Heap Space.
● Размер памяти стека намного меньше памяти в куче.
● Из-за простоты распределения памяти, стековая память работает намного
быстрее кучи.