Универзитет у Београду
Катедра за рачунарство и информатику

ПЛАТО

Програмски језици и алати

Смањивање величине извршних датотека компресијом кода

Мотивација

Компилацијом кода унапред (en. Ahead of Time) машински код настаје пре покретања апликације. Добијена извршна датотека садржи и методе који су начелно достижне, али се током конкретног извршавања можда никада не позову. Таквe методe ипак заузимају простор у извршној датотеци. Пројекат истражује како да се тај простор смањи уз ограничене додатне трошкове извршавања, нарочито када је за дато радно оптерећење потребан само део преведеног кода апликације.

Компресија кода

Методи који ће бити компресовани бирају се током превођења програма и прављења извршне датотеке. Када су доступни профили извршавања, на основу њих могу се издвојити методи који нису позивани током профилисања. Ови подаци описују радно оптерећење програма за задати очекивани скуп улаза; не гарантују да ће метод остати некоришћен и у каснијим извршавањима.

Изабрани методи групишу се у кластере, а сваки кластер чува се као независан компресовани низ бајтова. Преостали методи остају некомпресовани у уобичајеној секцији кода извршне датотеке.
Методи су груписани у кластере према пакетима и класама у којима се налазе јер је очекивано да позив једног метода из неког пакета или кластера често потребује и друге методе из истог пакета или кластера.

Декомпресија метода и интеграција са окружењем за извршавање

Позиви који укључују компресоване методе користе посредно позивање. Први позив компресованог метода стиже до механизма за разрешавање адреса током извршавања. Он декомпресује одговарајући кластер у простор резервисан за инсталацију декомпресованих метода, омогућава извршавање његовог кода и ажурира одредишта позива за тај кластер тако да упућују на инсталиране адресе метода. Наредни позиви користе ове адресе без поновне декомпресије.

Интеграција са извршним окружењем обухвата и метаподатке потребне за обилазак стека, обраду изузетака и сакупљање отпада. Приступ метаподацима узима у обзир засебну област за декомпресовани код, тако да ови механизми могу да обрађују и методе смештене у њој. Декомпресовани кластери остају у меморији до завршетка процеса у случају потребе за поновним коришћењем.

Захвалница

Компресија кода развија се у оквиру истраживачке сарадње између Математичког факултета Универзитета у Београду и компаније Oracle LLC.