%!TEX root = Programmierparadigmen.tex \chapter{Java Bytecode} \index{Java Bytecode|(} \begin{definition}[Bytecode]\xindex{Bytecode}% Der Bytecode ist eine Sammlung von Befehlen für eine virtuelle Maschine. \end{definition} Bytecode ist unabhängig von realer Hardware. \begin{definition}[Heap]\xindex{Heap}\xindex{Speicher!dynamischer}% Der dynamische Speicher, auch Heap genannt, ist ein Speicherbereich, aus dem zur Laufzeit eines Programms zusammenhängende Speicherabschnitte angefordert und in beliebiger Reihenfolge wieder freigegeben werden können. \end{definition} \textit{Activation Record} ist ein \textit{Stackframe}.\index{Activation Record|see{Stackframe}} \section{Instruktionen}\xindex{imul@\texttt{imul}}\xindex{iadd@\texttt{iadd}}\xindex{fadd@\texttt{fadd}}\xindex{iaload@\texttt{iaload}}\xindex{faload@\texttt{faload}}\xindex{iastore@\texttt{iastore}}\xindex{fastore@\texttt{fastore}}\xindex{iconst\_@\texttt{iconst\_}}\xindex{fconst\_@\texttt{fconst\_}}\xindex{idiv@\texttt{idiv}}\xindex{fdiv@\texttt{fdiv}}\xindex{imul@\texttt{imul}}% \begin{table}[h] \begin{tabular}{p{6cm}|ll} \textbf{Beschreibung} & \textbf{int} & \textbf{float} \\ \hline Addition & iadd & fadd \\ Element aus Array auf Stack packen & iaload & faload \\ Element aus Stack in Array speichern & iastore & fastore \\ Konstante auf Stack legen & iconst\_ & fconst\_ \\ Divide second-from top by top & idiv & fdiv \\ Multipliziere die obersten beiden Zahlen des Stacks & imul & fmul \\ \end{tabular} \end{table} Weitere:\xindex{iload\_0@\texttt{iload\_0}}% \begin{itemize} \item \texttt{iload\_0}: Läd die lokale Variable 0 auf den Stack. \item \texttt{iload\_1}: Läd die lokale Variable 1 auf den Stack. \item \texttt{iload\_2}: Läd die lokale Variable 2 auf den Stack. \item \texttt{iload\_3}: Läd die lokale Variable 3 auf den Stack. \end{itemize} \subsection{if-Abfragen}\xindex{if\_icmp@\texttt{if\_icmp}}% Im Java-Bytecode gibt es einige verschiedene if-Abfragen. Diese sind immer nach dem Schema \texttt{