first done
This commit is contained in:
parent
399bbd9feb
commit
f4a7595214
Binary file not shown.
|
@ -33,7 +33,6 @@
|
|||
\newpage
|
||||
\appendix
|
||||
\sloppy
|
||||
%\addcontentsline{toc}{chapter}{Термины, определения и сокращения}
|
||||
\printnomenclature[27mm]
|
||||
|
||||
\chapter*{Приложения}
|
||||
|
|
19
jtc1-01a.tex
19
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}
|
|
@ -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{
|
||||
|
|
Loading…
Reference in New Issue