Luxoft Flashcards

1
Q

как устроена память в java

A

Итак, память процесса различается на heap (куча) и non-heap (стек) память, и состоит из 5 областей.

  • Eden Space (heap) –объекты. Когда данная область заполняется GC выполняет быструю (minor collection) сборку мусора. По сравнению с полной сборкой мусора она занимает мало времени, и затрагивает только эту область памяти — перемещает выжившие объекты в следующую область.
  • Survivor Space (heap) –объекты пережили хотя бы одну сборку мусора
  • Tenured (Old) Generation (heap) — Здесь скапливаются долгоживущие объекты (крупные высокоуровневые объекты, синглтоны, менеджеры ресурсов и проч.). Когда заполняется эта область, выполняется полная сборка мусора (full, major collection), которая обрабатывает все созданные JVM объекты.
  • Permanent Generation (non-heap) – Здесь хранится метаинформация, используемая JVM (используемые классы, методы и т.п.). В частноси
  • Code Cache (non-heap) — эта область используется JVM, когда включена JIT-компиляция, в ней кешируется скомпилированный платформенно — зависимый код.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

как устроен сборщик мусора и как работает

A

главная идея поиска мусора состоит в мысли: “Живые объект - те до которых мы можем добраться с корневых точек (GC Root), все остальные - мусор. Все что доступно с живого объекта - также живое”.
(GC Root) это Локальные переменные и параметры методов
Java Потоки
Статические переменные
Ссылки из JNI.
А работает просто = запускается StopTheWorkd и происходит чистка

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

Как работает Java машина (JVM)

A

e) это среда для запуска Java приложений. При запуске Java программы вызывается метод main, который реализован в java коде. JVM это часть JRE (Java Runtime Environment).
Когда мы компилируем .java файл, создается .class файл (java byte code) с таким же названием, этот файл генерируется Java компилятором.

Загрузчик классов (Class loader) считывает .class файл, генерирует соответсвующие бинарные данные и сохраняет это в области методов. JVM создает объекты класса в области Heap памяти.

Три основные загрузчика классов (cloass loaders):Bootstrap class loader: Каждая реализация JVM должна иметь bootstrap class loader, способная загружать проверенные классы. Загружается основное API Java классов, которое находится в директории JAVA_HOME/jre/lib. Этот путь так же называют bootstrap path. Загрузчик реализован на языках C, C++.

Extension class loader: Это дочерний загрзчик bootstrap class loader. Он загружает классы, которые представлены в дирекотрии JAVA_HOME/jre/lib/ext(Extension path) или в любой другой директории, которая описана в системной переменной java.ext.dirs. Это функция реализована с помощью Java sun.misc.Launcher$ExtClassLoader class

System/Application class loader: В свою очередь это дочерний загрузчик extension class loader. Загружает классы из области приложения (application classpath). Так же реализован с помощью Java sun.misc.Launcher$ExtClassLoader class.

Движок выполнения (Execution Engine)
Execution engine выполняет байткод .class файла. Он считывает байткод последовательно, строчка за строчкой, использует информацию, которая находится в разных областях памяти JVM и выполняет инструкции кода. Можно разделить на три составляющих:

Интерпретатор (Interpreter): Интерпретирует байт код в команды и выполняет их.
Just-In-Time Compiler(JIT): преобразует в нативный код, всякий раз когда встречает повторяющиеся вызовы методов. JIT поставляет нативный код и повторная интерпретация не нужна, поэтому увеличивается эффективность.
Сборщик мусора (Garbage Collector): Уничтожает не используемые объекты.

Java Native Interface (JNI)Это интерфейс для взаимодействия с нативными методами системных библиотек, которые могут быть написаны на C, C++. Для вызова методов из системных библиотек (например .dll или .so) необходимо указать где именно это библиотека находится, чтобы JVM знала об этой библиотеке.

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

Jconsole

A

контроль производительности приложения - сбор статистики и создание дампов

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

Обход деревьев

A

последовательная обработка (просмотр, изменение и т.п.) всех узлов дерева, при котором каждый узел обрабатывается строго один раз. При этом получается линейная расстановка узлов дерева.

В зависимости от траекторий выделяют два типа обхода:
— горизонтальный (в ширину); и
— вертикальный (в глубину).

Горизонтальный обход подразумевает обход дерева по уровням (level-ordered) – вначале обрабатываются все узлы текущего уровня, после чего осуществляется переход на нижний уровень.

При вертикальном обходе порядок обработки текущего узла и узлов его правого и левого поддеревьев варьирует и по этому признаку выделяют три варианта вертикального обхода:
— прямой (префиксный, pre-ordered): вершина – левое поддерево – правое поддерево;
— обратный (инфиксный, in-ordered): левое поддерево – вершина – правое поддерево; и
— концевой (постфиксный, post-ordered): левое поддерево – правое поддерево – вершина.

Бинарное дерево поиска — это бинарное дерево, обладающее дополнительными свойствами: значение левого потомка меньше значения родителя, а значение правого потомка больше значения родителя для каждого узла дерева. То есть, данные в бинарном дереве поиска хранятся в отсортированном виде. При каждой операции вставки нового или удаления существующего узла отсортированный порядок дерева сохраняется. При поиске элемента сравнивается искомое значение с корнем. Если искомое больше корня, то поиск продолжается в правом потомке корня, если меньше, то в левом, если равно, то значение найдено и поиск прекращается.

Сблансированное дерево - это кода с обоих сторон одинаковое колличество элементов…

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