Skip to content

Latest commit

 

History

History
48 lines (32 loc) · 1.69 KB

File metadata and controls

48 lines (32 loc) · 1.69 KB

codegen

Die Idee von der Java Virtual Machine

  • Die Java Virtual Machine dient als Abstraktionsschicht zwischen Betriebssystem und der Anwendung.

    | Quellcode |----> Compiler --->| Bytecode |---> JVM --->| Assembler |

Generierung von Quellcode

Beispielsweise durch: JAXB, Template based e.g. Freemarker, Velocity

XJC

  • run mvn clean generate-sources -Pxjc
  • view resulting Person.java in target\generated-sources

Generierung von Bytecode

Beispielsweise durch: ASM, BCEL, CGLib, ByteBuddy Bytecode einsehen: http://www.javadecompilers.com/

Annotation Processing (statisch)

  • run mvn clean install (this jar is the annotation processor)
  • run mvn clean compile -Papt (to apply annotation processor)
  • copy target/generated sources in de.bk.codegen.apt and run Main class

Lombok

  • src\main\java\de\bk\codegen\lombok\Person.java
  • compile and inspect resulting class file

ByteBuddy (dynamisch)

  • src\main\java\de\bk\codegen\bytebuddy\InstantiationExample.java
  • run main method, see instance getting created and toString method being called

Java Agent

  • run mvn clean install
  • run mvn clean compile exec:exec -Pagent and view log for javaagent out print

Fazit

Quellcode

+ Der Quellcode ist einsehbar. leichter zu debuggen Der Generator ist leicht zu schreiben.

- Ein Compiler ist erforderlich. Die Übersetzung kostet Zeit und Speicher.

Bytecode

+ Bytecode sehr performant Es ist kein Java-Compiler nötig. sinnvoll bei Bytecode-zu-Bytecode-Transformationen.

- Der Bytecode ist schlecht einsehbar. Das Debugging ist schwierig. Der Generator ist schwer zu schreiben, da Wissen über Bytecode nötig ist.