Верификация кучи памяти объектов виртуальной машины
Authors: Петров И.А. 
Published: December 2024

В настоящей статье рассмотрены алгоритмы верификации объектной кучи памяти (heap) виртуальной машины Java, а также разработан и реализован собственный алгоритм верификации объектной памяти на языке программирования С++, основанный на использовании собственных аллокаторов. Данный верификационный алгоритм обходит все объекты кучи, после чего применяет два этапа проверки ссылок на другие объекты в объектной памяти виртуальной машины специальными верификационными функциями. На первом этапе проверяется принадлежность ссылки к области памяти выделенной определённым аллокатором (специальной компонентой виртуальной машины, которая занимается выделением памяти под её различные структуры). На втором этапе, зная к какой области памяти, выделенной определённым аллокатором, принадлежит проверяемая ссылка, определяется непосредственно корректной данной ссылки. Данные этапы верификатора можно применять до и после работы сборщика мусора по опциям, подаваемым при запуске виртуальной машины. Такой алгоритм позволяет проверить правильность работы с виртуальной памятью как сборщика мусора, так и других компонент виртуальной машины, которые взаимодействуют с объектной кучей. Представленная работа является частью большого проекта компании Huawei Technologies Co. Ltd. по разработке виртуальной машины Javaдля мобильных устройств. Разработанный инструмент уже используется разработчиками компании для отлаживания ошибок времени выполнения и выявления недочётов работы с объектами в исходном коде программы. Для проверки правильности верификации реализован набор unit-тестов, покрывающий многочисленные ситуации работы с памятью виртуальной машины как правильные, так и заведомо ошибочные. Данный верификатор может совершенствоваться для увеличения скорости работы виртуальной машины и уменьшение воздействия на её работу.

In this paper we discuss object memory heap verification algorithms of the Java virtual machine and developed and implemented a proprietary object memory verification algorithm. This verification algorithm iterates over all heap objects, after which it applies two stages of checking references to other objects in the object memory of the virtual machine with special verification functions. At the first stage, it is checked that the reference to references to the memory area allocated by some allocator (a special component of the virtual machine that allocates memory for its various structures). At the second stage, knowing to which memory area allocated by some allocator the checked reference belongs, it is determined directly by the correct given reference. These stages of the verifier can be applied before and after the garbage collector by the options given when starting the virtual machine. This algorithm allows us to check that the garbage collector and other virtual machine components that interact with the object heap are working correctly with virtual memory. The developed tool is already used by the company's developers to debug run-time errors and identify shortcomings in working with objects in the program source code. To check the correctness of verification, a set of unit tests was implemented that covers many situations of working with the memory of a virtual machine, both correct and deliberately erroneous. This verifier can be improved to increase the speed of the virtual machine and reduce the impact on its operation.