Blog about Android
-
У класса Object есть методы: wait(), notify(), notifyAll(). Для чего они? Как они работают? Какое обязательное условия для их использования?
Методы wait(), notify(), и notifyAll() в классе Object используются для межпоточной синхронизации. Обязательное условие: Эти методы должны вызываться только внутри синхронизированного блока или метода, иначе будет выброшено исключение IllegalMonitorStateException.
-
Бывают ли в Android-е stop-the-world паузы?
Да, в Android могут происходить stop-the-world (STW) паузы во время сборки мусора (Garbage Collection), даже при использовании ART (Android Runtime). Хотя ART использует оптимизированные сборщики мусора, такие как Concurrent Mark-Sweep (CMS) и Generational GC, некоторые этапы сборки мусора, такие как marking phase или heap compaction, могут временно приостановить выполнение всех потоков приложения для корректного освобождения…
-
Какой GC в ART?
В Android Runtime (ART) используется Garbage Collector с рядом оптимизаций, чтобы минимизировать задержки при сборке мусора и повысить производительность:
-
GC root-ы
GC Roots — это объекты, от которых начинается процесс сборки мусора. Они не могут быть очищены сборщиком мусора, так как к ним всегда есть ссылки. Основные типы GC Roots:
-
Garbage Collector. Как работает, какие бывают?
Garbage Collector автоматически управляет памятью, удаляя объекты, которые больше не используются программой, чтобы освободить пространство в куче. Основные типы GC: GC состоит из нескольких фаз: маркировка объектов, которые еще используются, очистка неиспользуемых и компактирование.
-
Как получить утечку памяти в Android-е?
В Android утечки памяти происходят, когда объекты, которые больше не нужны, не освобождаются сборщиком мусора (Garbage Collector) из-за оставшихся на них ссылок. Основные причины утечек: Для обнаружения утечек можно использовать инструмент LeakCanary.
-
Сколько может быть процессов в Android приложении? Сколько потоков?
Процессы в Android: Потоки в Android:
-
Чем процесс от потока отличается? Какое взаимоотношение процессов с потоками?
Отличия процесса и потока: Взаимоотношение процессов и потоков в Java: В Java каждый процесс может иметь несколько потоков, что позволяет программам выполнять задачи параллельно. Все потоки внутри одного процесса могут обмениваться данными через общую память.
-
ClassLoader в Java. Какие бывают? Какие отрабатывают на старте Android приложения?
Основные виды ClassLoader в Java: ClassLoader в Android: В Android используется PathClassLoader, который загружает классы APK приложения, а также библиотеки. При старте приложения Android использует этот ClassLoader для загрузки классов из APK и сторонних библиотек.
-
Если два потока выполняют один и тот же метод, будет ли между ними шариться переменная из метода?
Нет, если два потока выполняют один и тот же метод, локальные переменные метода не будут разделяться между потоками. Каждому потоку выделяется собственная память в стеке, и локальные переменные метода хранятся в этой области. Это означает, что каждый поток будет иметь свою собственную копию локальных переменных, и они не будут «шариться» между потоками. Однако, если переменная…
-
Модель памяти в Java? Heap, Stack. Как хранятся static объекты?
Java использует кучу (Heap) и стек (Stack) для управления памятью. Хранение static объектов:
-
hashCode() и equals(). Какой у них контракт? Как нужно их переопределять? Где они используются и как?
Контракт hashCode() и equals() в Java: Как переопределять: Где используются hashCode() и equals(): Правильное переопределение этих методов гарантирует корректное поведение при работе с коллекциями и логикой сравнения объектов.