<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.3 20210610//EN" "JATS-journalpublishing1-3.dtd">
<article article-type="research-article" dtd-version="1.3" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="ru"><front><journal-meta><journal-id journal-id-type="publisher-id">ellibs</journal-id><journal-title-group><journal-title xml:lang="ru">Электронные библиотеки</journal-title><trans-title-group xml:lang="en"><trans-title>Russian Digital Libraries Journal</trans-title></trans-title-group></journal-title-group><issn pub-type="epub">1562-5419</issn><publisher><publisher-name>Казанский (Приволжский) федеральный университет</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.26907/1562-5419-2020-23-5-985-996</article-id><article-id custom-type="elpub" pub-id-type="custom">ellibs-243</article-id><article-categories><subj-group subj-group-type="heading"><subject>Research Article</subject></subj-group><subj-group subj-group-type="section-heading" xml:lang="ru"><subject>Статьи</subject></subj-group></article-categories><title-group><article-title>Сравнительный анализ производительности механизмов метапрограммирования в языке Java</article-title><trans-title-group xml:lang="en"><trans-title>Comparative Analysis of the Performance of Metaprogramming Mechanisms in the Java Language</trans-title></trans-title-group></title-group><contrib-group><contrib contrib-type="author" corresp="yes"><name-alternatives><name name-style="eastern" xml:lang="ru"><surname>Галиуллин</surname><given-names>А. Ф.</given-names></name><name name-style="western" xml:lang="en"><surname>Galiullin</surname><given-names>A.</given-names></name></name-alternatives><email xlink:type="simple">gali.azat@gmail.com</email><xref ref-type="aff" rid="aff-1"/></contrib><contrib contrib-type="author" corresp="yes"><name-alternatives><name name-style="eastern" xml:lang="ru"><surname>Шахова</surname><given-names>И. С.</given-names></name><name name-style="western" xml:lang="en"><surname>Shakhova</surname><given-names>I. S.</given-names></name></name-alternatives><email xlink:type="simple">is@it.kfu.ru</email><xref ref-type="aff" rid="aff-1"/></contrib></contrib-group><aff-alternatives id="aff-1"><aff xml:lang="ru"><institution>Высшая школа информационных технологий и интеллектуальных систем Казанского (Приволжского) федерального университета</institution></aff><aff xml:lang="en"><institution>Higher School of Information Technology and Intelligent Systems</institution></aff></aff-alternatives><pub-date pub-type="collection"><year>2020</year></pub-date><pub-date pub-type="epub"><day>28</day><month>10</month><year>2020</year></pub-date><volume>23</volume><issue>5</issue><fpage>985</fpage><lpage>996</lpage><permissions><copyright-statement>Copyright &amp;#x00A9; Галиуллин А.Ф., Шахова И.С., 2020</copyright-statement><copyright-year>2020</copyright-year><copyright-holder xml:lang="ru">Галиуллин А.Ф., Шахова И.С.</copyright-holder><copyright-holder xml:lang="en">Galiullin A., Shakhova I.S.</copyright-holder><license xml:lang="ru" license-type="creative-commons-attribution" xlink:href="https://creativecommons.org/licenses/by/4.0/" xlink:type="simple"><license-p>Данная работа распространяется под лицензией Creative Commons Attribution 4.0.</license-p></license><license xml:lang="en" license-type="creative-commons-attribution" xlink:href="https://creativecommons.org/licenses/by/4.0/" xlink:type="simple"><license-p>This work is licensed under a Creative Commons Attribution 4.0 License.</license-p></license></permissions><self-uri xlink:href="https://ellibs.elpub.ru/jour/article/view/243">https://ellibs.elpub.ru/jour/article/view/243</self-uri><abstract><p>Использование определенных механизмов метапрограммирования при разработке программных библиотек на языке Java может негативно сказываться на времени сборки и работе конечного программного продукта, в котором они используются. Для того, чтобы нивелировать воздействие различных подходов, необходимо предложить комплексное решение, позволяющее регулировать их использование в зависимости от особенностей контекста, что, в свою очередь, требует проведения предварительного анализа. В данной статье рассмотрены существующие в языке Java механизмы метапрограммирования и представлены результаты сравнения влияния данных подходов на время сборки Android-приложений. </p></abstract><trans-abstract xml:lang="en"><p>The use of different metaprogramming mechanisms for program libraries development in Java may have some negative effect on build time and end products. The article is aimed to describe metaprogramming mechanisms in the Java language and present the results of experiments that compare the impact of approaches on the build time of small and large projects.</p></trans-abstract><kwd-group xml:lang="ru"><kwd>обработка аннотаций</kwd><kwd>рефлексия</kwd><kwd>кодогенерация</kwd><kwd>производительность</kwd></kwd-group><kwd-group xml:lang="en"><kwd>annotation processing</kwd><kwd>Reflection</kwd><kwd>Android</kwd><kwd>Java</kwd></kwd-group></article-meta></front><back><ref-list><title>References</title><ref id="cit1"><label>1</label><citation-alternatives><mixed-citation xml:lang="ru">GitHub – JakeWharton/butterknife: Bind Android views and callbacks to fields and methods. URL: https://github.com/JakeWharton/butterknife.</mixed-citation><mixed-citation xml:lang="en">GitHub – JakeWharton/butterknife: Bind Android views and callbacks to fields and methods. URL: https://github.com/JakeWharton/butterknife.</mixed-citation></citation-alternatives></ref><ref id="cit2"><label>2</label><citation-alternatives><mixed-citation xml:lang="ru">The Java Community Process(SM) Program – JSRs: Java Specification Requests - detail JSR# 269. URL: https://jcp.org/en/jsr/detail?id=269.</mixed-citation><mixed-citation xml:lang="en">The Java Community Process(SM) Program – JSRs: Java Specification Requests - detail JSR# 269. URL: https://jcp.org/en/jsr/detail?id=269.</mixed-citation></citation-alternatives></ref><ref id="cit3"><label>3</label><citation-alternatives><mixed-citation xml:lang="ru">Compilation Overview. URL: http://openjdk.java.net/groups/compiler/doc/ compilation-overview/index.html.</mixed-citation><mixed-citation xml:lang="en">Compilation Overview. URL: http://openjdk.java.net/groups/compiler/doc/ compilation-overview/index.html.</mixed-citation></citation-alternatives></ref><ref id="cit4"><label>4</label><citation-alternatives><mixed-citation xml:lang="ru">Trail: The Reflection API (The Java&amp;trade; Tutorials). URL: https://docs.ora-cle.com/javase/tutorial/reflect/index.html</mixed-citation><mixed-citation xml:lang="en">Trail: The Reflection API (The Java&amp;trade; Tutorials). URL: https://docs.ora-cle.com/javase/tutorial/reflect/index.html</mixed-citation></citation-alternatives></ref><ref id="cit5"><label>5</label><citation-alternatives><mixed-citation xml:lang="ru">GitHub – google/dagger: A fast dependency injector for Android and Java. URL: https://github.com/google/dagger.</mixed-citation><mixed-citation xml:lang="en">GitHub – google/dagger: A fast dependency injector for Android and Java. URL: https://github.com/google/dagger.</mixed-citation></citation-alternatives></ref><ref id="cit6"><label>6</label><citation-alternatives><mixed-citation xml:lang="ru">Dagger – Android SDK statistics | AppBrain. URL: https://www.ap-pbrain.com/stats/libraries/details/dagger/dagger</mixed-citation><mixed-citation xml:lang="en">Dagger – Android SDK statistics | AppBrain. URL: https://www.ap-pbrain.com/stats/libraries/details/dagger/dagger</mixed-citation></citation-alternatives></ref><ref id="cit7"><label>7</label><citation-alternatives><mixed-citation xml:lang="ru">GitHub – JakeWharton/dagger-reflect: A reflection-based implementation of the Dagger dependency injection library for fast IDE builds. URL: https://github.com/JakeWharton/dagger-reflect.</mixed-citation><mixed-citation xml:lang="en">GitHub – JakeWharton/dagger-reflect: A reflection-based implementation of the Dagger dependency injection library for fast IDE builds. URL: https://github.com/JakeWharton/dagger-reflect.</mixed-citation></citation-alternatives></ref><ref id="cit8"><label>8</label><citation-alternatives><mixed-citation xml:lang="ru">Dependency injection. URL: https://habr.com/ru/post/350068.</mixed-citation><mixed-citation xml:lang="en">Dependency injection. URL: https://habr.com/ru/post/350068.</mixed-citation></citation-alternatives></ref><ref id="cit9"><label>9</label><citation-alternatives><mixed-citation xml:lang="ru">Gradle Build Tool. URL: https://gradle.org.</mixed-citation><mixed-citation xml:lang="en">Gradle Build Tool. URL: https://gradle.org.</mixed-citation></citation-alternatives></ref><ref id="cit10"><label>10</label><citation-alternatives><mixed-citation xml:lang="ru">GitHub – android/architecture-components-samples: Samples for Android Archi-tecture Components. URL: https://github.com/android/ architecture-compo-nents-samples.</mixed-citation><mixed-citation xml:lang="en">GitHub – android/architecture-components-samples: Samples for Android Archi-tecture Components. URL: https://github.com/android/ architecture-compo-nents-samples.</mixed-citation></citation-alternatives></ref><ref id="cit11"><label>11</label><citation-alternatives><mixed-citation xml:lang="ru">Room Persistence Library. URL: https://developer.android.com/topic/ librar-ies/architecture/room.</mixed-citation><mixed-citation xml:lang="en">Room Persistence Library. URL: https://developer.android.com/topic/ librar-ies/architecture/room.</mixed-citation></citation-alternatives></ref><ref id="cit12"><label>12</label><citation-alternatives><mixed-citation xml:lang="ru">Lifecycle | Android Developers. URL: https://developer.android.com/ jet-pack/androidx/releases/lifecycle.</mixed-citation><mixed-citation xml:lang="en">Lifecycle | Android Developers. URL: https://developer.android.com/ jet-pack/androidx/releases/lifecycle.</mixed-citation></citation-alternatives></ref><ref id="cit13"><label>13</label><citation-alternatives><mixed-citation xml:lang="ru">GitHub – butterknife/butterknife-reflect at master JakeWharton/butterknife. URL: https://github.com/JakeWharton/butterknife/ tree/master/ butterknife-reflect.</mixed-citation><mixed-citation xml:lang="en">GitHub – butterknife/butterknife-reflect at master JakeWharton/butterknife. URL: https://github.com/JakeWharton/butterknife/ tree/master/ butterknife-reflect.</mixed-citation></citation-alternatives></ref></ref-list><fn-group><fn fn-type="conflict"><p>The authors declare that there are no conflicts of interest present.</p></fn></fn-group></back></article>
