как устроена память в java
Итак, память процесса различается на heap (куча) и non-heap (стек) память, и состоит из 5 областей.
как устроен сборщик мусора и как работает
главная идея поиска мусора состоит в мысли: “Живые объект - те до которых мы можем добраться с корневых точек (GC Root), все остальные - мусор. Все что доступно с живого объекта - также живое”.
(GC Root) это Локальные переменные и параметры методов
Java Потоки
Статические переменные
Ссылки из JNI.
А работает просто = запускается StopTheWorkd и происходит чистка
Как работает Java машина (JVM)
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 знала об этой библиотеке.
Jconsole
контроль производительности приложения - сбор статистики и создание дампов
Обход деревьев
последовательная обработка (просмотр, изменение и т.п.) всех узлов дерева, при котором каждый узел обрабатывается строго один раз. При этом получается линейная расстановка узлов дерева.
В зависимости от траекторий выделяют два типа обхода:
— горизонтальный (в ширину); и
— вертикальный (в глубину).
Горизонтальный обход подразумевает обход дерева по уровням (level-ordered) – вначале обрабатываются все узлы текущего уровня, после чего осуществляется переход на нижний уровень.
При вертикальном обходе порядок обработки текущего узла и узлов его правого и левого поддеревьев варьирует и по этому признаку выделяют три варианта вертикального обхода:
— прямой (префиксный, pre-ordered): вершина – левое поддерево – правое поддерево;
— обратный (инфиксный, in-ordered): левое поддерево – вершина – правое поддерево; и
— концевой (постфиксный, post-ordered): левое поддерево – правое поддерево – вершина.
Бинарное дерево поиска — это бинарное дерево, обладающее дополнительными свойствами: значение левого потомка меньше значения родителя, а значение правого потомка больше значения родителя для каждого узла дерева. То есть, данные в бинарном дереве поиска хранятся в отсортированном виде. При каждой операции вставки нового или удаления существующего узла отсортированный порядок дерева сохраняется. При поиске элемента сравнивается искомое значение с корнем. Если искомое больше корня, то поиск продолжается в правом потомке корня, если меньше, то в левом, если равно, то значение найдено и поиск прекращается.
Сблансированное дерево - это кода с обоих сторон одинаковое колличество элементов…