Java-Bytecode.tex 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. %!TEX root = Programmierparadigmen.tex
  2. \chapter{Java Bytecode}
  3. \index{Java Bytecode|(}
  4. \begin{definition}[Bytecode]\xindex{Bytecode}%
  5. Der Bytecode ist eine Sammlung von Befehlen für eine virtuelle Maschine.
  6. \end{definition}
  7. Bytecode ist unabhängig von realer Hardware.
  8. \begin{definition}[Heap]\xindex{Heap}\xindex{Speicher!dynamischer}%
  9. Der dynamische Speicher, auch Heap genannt, ist ein Speicherbereich, aus dem
  10. zur Laufzeit eines Programms zusammenhängende Speicherabschnitte angefordert
  11. und in beliebiger Reihenfolge wieder freigegeben werden können.
  12. \end{definition}
  13. \textit{Activation Record} ist ein \textit{Stackframe}.\index{Activation Record|see{Stackframe}}
  14. \section{Instruktionen}
  15. \begin{table}[h]
  16. \begin{tabular}{p{6cm}|ll}
  17. \textbf{Beschreibung} & \textbf{int} & \textbf{float} \\ \hline
  18. Addition & iadd & fadd \\
  19. Element aus Array auf Stack packen & iaload & faload \\
  20. Element aus Stack in Array speichern & iastore & fastore \\
  21. Konstante auf Stack legen & iconst\_<i> & fconst\_<f> \\
  22. Divide second-from top by top & idiv & fdiv \\
  23. Multipliziere die obersten beiden Zahlen des Stacks & imul & fmul \\
  24. \end{tabular}
  25. \end{table}
  26. \section{Polnische Notation}
  27. \begin{definition}[Schreibweise von Rechenoperationen]
  28. Sei $f: A \times B \rightarrow C$ eine Funktion, $a \in A$ und $b \in B$.
  29. \begin{defenum}
  30. \item Die Schreibweise $a\ f\ b$ heißt \textbf{Infix-Notation}\xindex{Infix-Notation}.
  31. \item Die Schreibweise $f\ a\ b$ heißt \textbf{Präfixnotation}\xindex{Präfixnotation}
  32. \item Die Schreibweise $a\ b\ f$ heißt \textbf{Postfixnotation}\xindex{Postfixnotation}.
  33. \end{defenum}
  34. \end{definition}
  35. \textit{Polnische Notation}\index{Notation!polnische|see{Präfixnotation}} ist ein Synonym für die Präfixnotation.
  36. \textit{Umgekehrte polnische Notation}\index{Notation!umgekehrte polnische|see{Postfixnotation}} ist ein Synonym für die Postfixnotation.
  37. \begin{beispiel}[Schreibweise von Rechenoperationen]
  38. \begin{bspenum}
  39. \item $1 + 2$ nutzt die Infix-Notation.
  40. \item $f\ a\ b$ nutzt die polnische Notation.
  41. \item Wir der Ausdruck $1 + 2 \cdot 3$ in Infix-Notation ohne Operatoren-Präzedenz
  42. ausgewertet, so gilt:
  43. \[1 + 2 \cdot 3 = 9\]
  44. Wird er mit Operatoren-Präzendenz ausgewertet, so gilt:
  45. \[1 + 2 \cdot 3 = 7\]
  46. \item Der Ausdruck
  47. \[1 + 2 \cdot 3 = 7\]
  48. entspricht
  49. \[+\ 1\ \cdot\ 2\ 3\]
  50. in der polnischen Notation und
  51. \[1\ 2\ 3\ \cdot\ +\]
  52. in der umgekehrten polnischen Notation.
  53. \end{bspenum}
  54. \end{beispiel}
  55. \begin{bemerkung}[Eigenschaften der Prä- und Postfixnotation]
  56. \begin{bemenum}
  57. \item Die Reihenfolge der Operanden kann beibehalten und gleichzeitig
  58. auf Klammern verzichtet werden, ohne dass sich das Ergebnis
  59. verändert.
  60. \item Die Infix-Notation kann in einer Worst-Case Laufzeit von $\mathcal{O}(n)$,
  61. wobei $n$ die Anzahl der Tokens ist mittels des
  62. \textit{Shunting-yard-Algorithmus}\xindex{Shunting-yard-Algorithmus} in
  63. die umgekehrte Polnische Notation überführt werden.
  64. \end{bemenum}
  65. \end{bemerkung}
  66. \section{Weitere Informationen}
  67. \begin{itemize}
  68. \item \url{http://cs.au.dk/~mis/dOvs/jvmspec/ref-Java.html}
  69. \item \href{http://scanftree.com/Data_Structure/prefix-postfix-infix-online-converter}{scanftree.com}:
  70. Infix $\leftrightarrow$ Postfix Konverter
  71. \end{itemize}
  72. \index{Java Bytecode|)}