Сборники трудов ИСП РАН


Подход к проведению динамического анализа Java-программ методом модификации виртуальной машины Java

М. К. Ермаков (МГУ, Москва), С. П. Вартанов (МГУ, Москва)

Аннотация

На настоящий момент при разработке программного обеспечения активно используются методы автоматического статического и динамического анализа программ. Так, динамический анализ предоставляет возможности обнаруживать дефекты и ошибки проектирования, проявляющиеся во время выполнения программ, требуя минимального участия эксперта. При проведении динамического анализа распространены два подхода к исследованию выполнения программы — внешний мониторинг, осуществляющийся системными средствами и отладчиками, и инструментация программного кода — модификация и внедрение дополнительной функциональности. При анализе исполняемого кода во внутреннем представлении, обрабатываемого интерпретатором или виртуальной машиной, становиться возможно применение третьего подхода — мониторинга средствами самого интерпретатора или виртуальной машины. В данной статье рассмотрены возможности подобного подхода на примере проведения анализа использования динамической памяти в виртуальной машине Dalvik операционной системы Android.
Работа над представленным методом обусловлена ограничениями виртуальной машины Dalvik, приводящими к невозможности использования большого количества существующих инструментов профилирования памяти. В данной статье рассмотрены непосредственные модификации виртуальной машины Dalvik, включающие расширение поддержки стандартного протокола Java Debug Wire Protocol, для отслеживания событий выделения, освобождения и доступа к памяти. Дополнительно приведён обзор возможностей разработанного отладчика, обеспечивающего регистрацию данных событий в режиме реального времени для последующей обработки. Представленный отладчик, основанный на существующем средстве Dalvik Debug Monitor, позволяет проводить работу одновременно с несколькими активными процессами и обработку результатов множественных запусков. В рамках практических экспериментов были рассмотрен набор стандартных пользовательских приложений Android, выполняющихся на модифицированной версии виртуальной машины Dalvik под контролем разработанного отладчика. Эксперименты позволили выявить некоторые базовые особенности работы с памятью, включающие активное использование массивов примитивных типов языка Java и неэффективность использования памяти, выделяемой для объектов классов, отвечающих за отображение элементов графического интерфейса приложений.

Ключевые слова

динамический анализ программ; профилирование памяти; Java; Android

Издание

Труды Института системного программирования РАН, том 27, вып. 2, 2015, стр. 23-38.

ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).

DOI: 10.15514/ISPRAS-2015-27(2)-2

Полный текст статьи в формате pdf Вернуться к содержанию тома