Java Flashcards

1
Q

Идея языка

A

Кроссплатформенность - написано/скомпилировано однажды, запускается везде.
Приложения java транслируются в специальный байт код, поэтому они могут работать на любой компьютерной архитектуре, для которой существует реализация виртуальной java машины.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

JVM

A

Java Virtual Machine - виртуальная машина java - основная часть исполняющей системы java : JRE (Java runtime environment).
JVM исполняет байт-код, созданный из текста java-программы компилятором java( javac). Может так же использоваться доя выполнения программ на других языках, скомпилированных в байт-код java.
Source code Java —> Java compiler—> Bytecode Java —> JVM —> computer

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Преимущества Java

A
  • объектно-ориентированный - все является обьектом
  • платформонезависимый
  • простой для понимания (основные концепции ооп)
  • безопасный - методы проверки подлинности основаны на шифровании с открытым ключом
  • архитектурно-нейтральным - скомпилированный код исполняется на многих процессорах
  • автоматическое управление памятью
  • многопоточность
  • большое сообщество
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Недостатки Java

A
  • платное коммерческое использование
  • низкая производительность (компиляция, абстракция, очистка памяти, взаимная блокировка потоков)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

JDK

A

Комплект разработчика на языке java:
- компилятор Java (javac)
- стандартные библиотеки, документация, утилиты
- исполнительная система Java (JRE : JVM + библиотеки классов)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

JRE

A

Java Runtime Enviroment - среда выполнения для java - минимальная реализация виртуальной машины, необходимая для исполнения java приложений, без компилятора

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

byte code

A

Машинно-независимый код низкого уровня, генерируемый транслятором из исходного кода

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Classloader

A

Часть JRE, которая динамически загружает Java классы в JVM. Обычно классы загружаются только по запросу. Система исполнения в Java не должна знать о файлах.
Загрузчик ищет библиотеки, читает их содержимое, загружает классы из библиотек по требованию.
Загрузчики классов:
- Bootstrap classloader(загрузчик класса bootstrap) : загружает основные библиотеки Java, расположенные в папке <JAVA_HOME>/jre/lib. Загрузчик является частью ядра JVM.</JAVA_HOME>

  • Extensions class loader(загрузчик класса расширений) : загружает код в каталоги расширений <JAVA_HOME>/jre/lib/ext или каталог, указанный системным свойством java.ext.dirs.</JAVA_HOME>
  • System class loader(системный загрузчик классов) : загружает код из java.class.path, который сопоставляется с переменной среды CLASSPATH. Реализуется классом sun.misc.Launcher$AppClassLoader.

Обязательные действия загрузчика классов :
- Загрузка : находит и импортирует двоичные данные для типа.

  • Связывание : выполняет проверку(обеспечивает правильность импортируемого типа), подготовку(выделяет память для переменных класса и инициализирует память значениями по умолчанию) и разрешение(необязательно)(преобразует символические ссылки из типа в прямые ссылки)
  • Инициализация : вызывает код Java, который инициализирует переменные класса их правильными начальными значениями.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

JIT

A

Just in time - динамическая компиляция, компиляция «на лету» - технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или другой формат непосредственно во время работы программы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Сборщик мусора (Garbage collector)

A

Способ автоматического управления памятью.
Действия :
- Находить мусор - неиспользуемые объекты. (Объект считается неиспользуемым, если ни одна из сущностей в коде, выполняемом в данный момент, не содержит ссылок на него, либо цепочка ссылок, которая могла бы связать объект с некоторой сущностью приложения, обрывается).
- Освобождать память от мусора.
Подходы обнаружения мусора :

  • Reference counting( подсчёт ссылок).
    Каждый объект имеет счётчик. Счётчик хранит информацию о том, сколько ссылок указывает на объект. Когда ссылка уничтожается, счётчик уменьшается. Если значение счетчика равно нулю, - объект можно считать мусором.
    Минусы : сложность обеспечения точности счетчика( сложно выявлять циклические зависимости, когда два объекта ссылаются друг на друга, но ни один живой объект на них не ссылается, что приводит к утечкам памяти).
  • Tracing(трассировка).
    Живыми могут считаться только те объекты, до которых можно добраться из корневых точек (GC Root) и те объекты, которые доступны из живого объекта. Все остальное мусор.
    Типы корневых точек:
    • локальные переменные и параметры методов
    • потоки
    • статические переменные
    • ссылки из JNI
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Методы очистки мусора

A
  • Copying collectors :
    Память делится на две части «from-space” и «to-space”.
    • объекты создаются в «from-space”;
    • когда «from-space” заполняется, приложение приостанавливается;
    • запускается сборщик мусора, находятся живые объекты в «from-space” и копируются в «to-space”;
    • когда все объекты скопированы «from-space” полностью очищаются;
    • «to-space” и «form-space” меняются местами.
    Плюсы:
    • объекты плотно забивают память
    Минусы:
    • приложение останавливается на время для полного прохождения цикла сборки мусора
    • когда все объекты живые, «form-space” и «to-space” будут обязаны быть одинакового размера
  • mark-and-sweep :
    Алгоритм :
    • объекты создаются в памяти;
    • в момент, когда нужно запустить сборщик мусора, приложение приостанавливается;
    • сборщик проходится по дереву объектов, помечая живые объекты;
    • сборщик проходится по всей памяти, находя все не отмеченные куски памяти и сохраняя их в «free list”;
    • когда новые объекты начинают создаваться, они создаются в памяти доступной во «free list”;
    Минусы :
    • приложение не работает пока происходит сборка мусора;
    • время остановки напрямую зависит от размеров памяти и количества объектов;
    • если не использовать «compacting” память будет использоваться неэффективно;
    Сборщики мусора HotSpot VM используют комбинированный подход Generational Garbage Collection, который позволяет использовать разные алгоритмы для разных этапов сборки мусора. Этот подход опирается на:
  • большинство создаваемых объектов быстро становятся мусором;
  • существует мало связей между объектами, которые были созданы в прошлом и только что созданными объектами;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Механизм сборки мусора

A

Процесс освобождения места в куче, для возможности добавления новых объектов. Объекты создаются посредством new, присваивая объекту ссылку. Для прекращения работы с обьектом достаточно перестать на него ссылаться :
- присвоив переменной ссылку на другой объект;
- присвоив значение null;
- прекратив выполнение метода, чтобы локальные переменные завершили своё существование;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Разновидности сборщиков мусора в виртуальной машине HotSpot

A
  • Serial ( последовательный) - самый простой вариант доя приложения с небольшим объемом данных и не требовательных к задержкам, Используется редко, но на слабых машинах может быть выбран по умолчанию.
  • Parallel (параллельный) - наследует подходы к сборке от последовательного сборщика, но добавляет параллелизм в некоторые операции, а так же возможности по автоматической подстройке под требуемые параметры производительности.
  • Concurrent Mark Sweep (CMS) - нацелен на снижение максимальных задержек путём выполнения части работ по сборке мусора параллельно с основными потоками приложения. Подходит для работы с относительно большими объемами данных в памяти.
  • Garbage-First (G1) - создан для замены CMS, особенно в серверных приложениях, работающих на многопроцессорных серверах и оперирующих большими объемами данных.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Виды памяти

A

Heap (куча) используется Java Runtime для выделения памяти под объекты и классы. Создание нового объекта так же происходит в куче. Это же является областью работы сборщика мусора. Любой объект, созданный в куче, имеет глобальный доступ и в него могут ссылаться из любой части.

Stack (стек) это область хранения данных также находящаяся в общей оперативной памяти (RAM) только для одного потока. Всякий раз, когда вызывается метод, в памяти стека создаётся новый блок, который содержит примитивы и ссылки на другие объекты в методе. Как только метод заканчивает работу, блок так же перестаёт использоваться, тем самым предоставляя доступ для следующего метода. Размер стековой памяти намного меньше объема памяти в куче. Стек в Java работает по схеме LIFO (Последний-зашёл-первый-вышел)

Различия Heap и Stack :
- Куча используется всеми частями приложения в то время как стек используется только одним потоком исполнения программы.
- Всякий раз, когда создаётся объект, он хранится в куче, а в памяти стека содержится лишь ссылка на него. Память стека содержит только локальные переменные примитивных типов и ссылки на объекты в куче.
-

How well did you know this?
1
Not at all
2
3
4
5
Perfectly