diff --git a/build/jtc1-01a.pdf b/build/jtc1-01a.pdf index d1596a5..91d329f 100644 Binary files a/build/jtc1-01a.pdf and b/build/jtc1-01a.pdf differ diff --git a/j-spec.tex b/j-spec.tex index bfc54d0..d86e989 100644 --- a/j-spec.tex +++ b/j-spec.tex @@ -33,7 +33,6 @@ \newpage \appendix \sloppy -%\addcontentsline{toc}{chapter}{Термины, определения и сокращения} \printnomenclature[27mm] \chapter*{Приложения} diff --git a/jtc1-01a.tex b/jtc1-01a.tex index 71630ec..2b5b91e 100644 --- a/jtc1-01a.tex +++ b/jtc1-01a.tex @@ -1,6 +1,8 @@ \documentclass[j-spec.tex]{subfiles} \begin{document} +\pagestyle{plain} +\sloppy \section{Платформа: история и окружение} \subsection{В этом разделе} Краткая история (причины возникновения); инструментарий, выбор версии; CLI; структура проекта; документирование; некоторые интересные способы сборки проектов. @@ -11,14 +13,14 @@ \item \nom{JRE}{(от англ. Java Runtime Environment) — минимальная (без компилятора и других средств разработки) реализация виртуальной машины, необходимая для исполнения Java-приложений. Состоит из виртуальной машины Java Virtual Machine и библиотеки Java-классов.} \item \nom{JVM}{(от англ. Java Virtual Machine) — виртуальная машина Java, основная часть исполняющей системы Java. Виртуальная машина Java исполняет байт-код, предварительно созданный из исходного текста Java-программы компилятором. JVM может также использоваться для выполнения программ, написанных на других языках программирования.} \item \nom{JIT}{(англ. Just-in-Time, компиляция «точно в нужное время»), динамическая компиляция — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения по сравнению с интерпретируемым байт-кодом за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. Технология JIT базируется на двух более ранних идеях, касающихся среды выполнения: компиляции байт-кода и динамической компиляции.} -\item \nom{CLI}{(англ. Command line interface, Интерфейс командной строки) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд). Также известен под названиями «консоль» и «терминал».} +\item \nom{CLI}{(англ. Command Line Interface, Интерфейс командной строки) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд). Также известен под названиями «консоль» и «терминал».} \item \nom{Docker}{программное обеспечение для автоматизации развёртывания и управления приложениями, контейнеризатор приложений. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть развёрнут почти на любой системе.} \end{itemize} \nomenclature{GPL}{GNU General Public License (чаще всего переводят как Открытое лицензионное соглашение GNU) — лицензия на свободное программное обеспечение, созданная в рамках проекта GNU, по которой автор передаёт программное обеспечение в общественную собственность. Её также сокращённо называют GNU GPL или даже просто GPL, если из контекста понятно, что речь идёт именно о данной лицензии. GNU Lesser General Public License (LGPL) — это ослабленная версия GPL, предназначенная для некоторых библиотек ПО.} \subsection{Краткая история (причины возникновения)} \begin{itemize} -\item Язык создавали для разработки встраиваемых систем, сетевых приложений и прикладного \nom{ПО}{программное обеспечение}; +\item Язык создавали для разработки встраиваемых систем, сетевых приложений и прикладного \nom{ПО}{(программное обеспечение) - программа или множество программ, используемых для управления компьютером.}; \item Популярен из-за скорости исполнения и полного абстрагирования от исполнителя кода; \item Часто используется для программирования бэк-энда веб-приложений из-за изначальной нацеленности на сетевые приложения. \end{itemize} @@ -109,7 +111,7 @@ JVM для своей работы запрашивает у ОС некотор \item Survivor Space (heap) – сюда перемещаются объекты из предыдущей области после того, как они пережили хотя бы одну сборку мусора. Время от времени долгоживущие объекты из этой области перемещаются в Tenured Space. \item Tenured (Old) Generation (heap) — Здесь скапливаются долгоживущие объекты (крупные высокоуровневые объекты, синглтоны, менеджеры ресурсов и прочие). Когда заполняется эта область, выполняется полная сборка мусора (full, major collection), которая обрабатывает все созданные JVM объекты. \item Permanent Generation (non-heap) – Здесь хранится метаинформация, используемая JVM (используемые классы, методы и т.п.). -\item Code Cache (non-heap) — эта область используется JVM, когда включена JIT-компиляция, в ней кешируется скомпилированный платформенно-зависимый код. +\item Code Cache (non-heap) — эта область используется JVM, когда включена JIT-компиляция, в ней кэшируется скомпилированный платформенно-зависимый код. \end{enumerate} JVM самостоятельно осуществляет сборку так называемого мусора, что значительно облегчает работу программиста по отслеживанию утечек памяти, но важно помнить, что в Java утечки памяти всё равно существуют, особенно при программировании многопоточных приложений. @@ -119,7 +121,7 @@ JVM самостоятельно осуществляет сборку так н \def\svgwidth{150mm} \includesvg{pics/jc-01-jvm-struct.svg} \label{jvm:structure} - \caption{принцип работы JVM} + \caption{Принцип работы JVM} \end{figure} На пользовательском уровне важно не только исполнять базовые инструкции программы, но чтобы эти базовые инструкции умели как-то взаимодействовать со внешним миром, в том числе другими программами, поэтому JVM интегрирована в JRE - Java Runtime Environment. JRE - это набор из классов и интерфейсов, реализующих @@ -306,7 +308,7 @@ Hello, world! \end{lstlisting} \begin{frm} -\info Скомпилированные классы всегда содержат одинаковые первые четыре байта, которые в шестнадцатиричном представлении формируют надпись «кофе, крошка». +\info Скомпилированные классы всегда содержат одинаковые первые четыре байта, которые в шестнадцатеричном представлении формируют надпись «кофе, крошка». \begin{figure}[H] \centering \includegraphics[width=14cm]{jc-01-cafe-babe.png} @@ -448,7 +450,7 @@ Docker также не привносит ничего технологичес RUN javac -sourcepath ./src -d out ./src/ru/gb/dj/Main.java \end{lstlisting} -Последняя команда в \code{Dockerfile} говорит, что нужно сделать, когда контейнер создаётся из образа и заускается. +Последняя команда в \code{Dockerfile} говорит, что нужно сделать, когда контейнер создаётся из образа и запускается. \begin{lstlisting}[style=ASMStyle] CMD java -classpath ./out ru.gb.dj.Main \end{lstlisting} @@ -462,7 +464,10 @@ Docker-образ и, как следствие, Docker-контейнеры в \item Создать проект из трёх классов (основной с точкой входа и два класса в другом пакете), которые вместе должны составлять одну программу, позволяющую производить четыре основных математических действия и осуществлять форматированный вывод результатов пользователю; \item Скомпилировать проект, а также создать для этого проекта стандартную веб-страницу с документацией ко всем пакетам; \item Создать Makefile с задачами сборки, очистки и создания документации на весь проект. -\item *Создать два Docker-образа. Один должен компилировать Java-проект обратно в папку на компьютере подьзователя, а второй забирать скомпилированные классы и исполнять их. +\item *Создать два Docker-образа. Один должен компилировать Java-проект обратно в папку на компьютере пользователя, а второй забирать скомпилированные классы и исполнять их. \end{itemize} +\newpage +\printnomenclature[40mm] + \end{document} \ No newline at end of file diff --git a/settings/main-style-preamble.tex b/settings/main-style-preamble.tex index 2be3f4d..8beee8c 100644 --- a/settings/main-style-preamble.tex +++ b/settings/main-style-preamble.tex @@ -57,10 +57,10 @@ \setlength{\headheight}{33pt} \fancyhf{} \lhead{\includegraphics[height=5mm]{logo.png}} - \rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}} +% \rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}} \chead{\thepage} % \cfoot{\faRocket} - \rfoot{Всего слов: \wordcount} +% \rfoot{Всего слов: \wordcount} } \geometry{