Ablauf von Bytecode Transformation

Status
Nicht offen für weitere Antworten.

andkul

Bekanntes Mitglied
Hallo Profis,

ich muss in einem Projekt Bytecode Transformations machen. Dafür verwende ich die instrumentation API und die javassist API. Damit komm ich recht gut klar. Aber ich hab leider noch nicht so recht verstanden, wie das ganze genau abläuft. Ich hab´s folgendermaßen verstanden:

- Class Loader lädt eine Klasse
- Class Loader (oder JVM?) ruft die premain()-Methode meines Agenten auf
- Agent erzeugt einen Transformer und registriert ihn an einem Instrumentation-Objekt
- Agent ruft Transformer´s transform()-Methode auf
- Transformer transformiert Bytecode und gibt geänderten Bytecode an Agent zurück
- Agent gibt Bytecode an JVM weiter
- JVM führt Bytecode aus

Ich würd das ganze eigentlich gern in einem Sequenzdiagramm darstellen, aber
wie passt dieses Instrumentation-Objekt da rein?
ruft der Class Loader oder die JVM den Agenten auf?
wird eine Transformation direkt nach dem laden einer Klasse durchgeführt, dann die Klasse ausgeführt oder werden erst alle Klassen transformiert und dann alle ausgeführt?

naja, Fragen über Fragen...

Vielleicht weiß ja von euch einer Bescheid, im Internet find ich leider keine Klassendiagramme, Sequenzdiagramme oder sowas in der Richtung.

Danke schon mal
 

Noctarius

Top Contributor
Es gibt 2 Wege:
1. der über einen Agent (wenn du wirklich alle Classes tranformiert werden können sollen)
2. eigenen Classloader schreiben, der z.B. per Javassist den Bytecode der Klasse läd, verändert und dann an defineClass des Classloaders übergibt
 

andkul

Bekanntes Mitglied
ok, danke. Das war zwar nicht genau das was ich wissen wollte, aber gelernt hab ich trotzdem wieder was :)
 

Noctarius

Top Contributor
Der JavaAgent wird der JVM beim Starten mitgegeben, dann wird vom Classloader (ganz tief in der Runtime selbst - also nicht von deinem Classloader) das Instrumentation aufgerufen. Der Code dazu müsste in der defineClass Methode irgendwo drin stecken (vermutlich auf nativer Ebene).
 

andkul

Bekanntes Mitglied
ähh, nein. eigentlich nicht, aber offenbar schein ja keiner lust zu haben mir das näher zu erklären oder mir einen Link zu schicken, wo ich das selber nachlesen kann.
Also wenn du genau weißt, wie das abläuft, dann würdest du mir sehr helfen, wenn du mir das einfach mal stichpunktartig erklären würdest. Ich würd es halt gern so weit verstehen, dass ich mir ein sequenzdiagramm zeichnen kann, das den Ablauf genau beschreibt
 

andkul

Bekanntes Mitglied
danke für den Link, aber das meiste was ich bis jetzt weiß hab ich eigentlich von da, und von da
Javassist
Javassist API

Ich habs mir jetzt zwar nochmal genau durchgelesen, aber ich versteh den genauen Ablauf trotzdem nicht wirklich.
Ich würd einfach gern verstehen, wie JVM, Class Loader, Agent, Transformer und Instrumentation-Objekt genau zusammenspielen, und in welcher Reihenfolge, das kann ich aber aus dem Link leider nicht rauslesen, oder ich bin einfach zu blöd das zu verstehen?!?!
 

Noctarius

Top Contributor
JVM Start -> Agent Registrierung -> ClassLoader.loadClass -> ClassLoader.readBytes -> ClassLoader.defineClass -> Agent -> Transformer -> Class
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Frage zum Quellcode - Zusammhänge und Ablauf. Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
K For-Schleifen Ablauf Java Basics - Anfänger-Themen 5
M Feste Reihenfolge von dem Ablauf von Methoden Java Basics - Anfänger-Themen 7
CptK Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2
E Allgemein Verständnissfrage zum Ablauf mehrerer Threads Java Basics - Anfänger-Themen 4
H Modifizierte ArrayList für weiteren Ablauf beibehalten? Java Basics - Anfänger-Themen 12
M Einfacher Fenster-Ablauf Java Basics - Anfänger-Themen 5
R Programm nach ablauf eines Timers beenden Java Basics - Anfänger-Themen 10
K Zeit ablaufen lassen und nach Ablauf beenden Java Basics - Anfänger-Themen 5
J Ablauf im Skript/ Applet Java Basics - Anfänger-Themen 4
M Frage zum Ablauf eines Threads Java Basics - Anfänger-Themen 5
G Prinzipieller Ablauf bei Servlets Java Basics - Anfänger-Themen 25
W Eine Methode, mehrfacher gleichzeitger Ablauf möglich? Java Basics - Anfänger-Themen 2
L Ablauf abbrechen und zurück Java Basics - Anfänger-Themen 20
berserkerdq2 Ist JVM das gleiche wie IJVM (Bytecode) Java Basics - Anfänger-Themen 1
M Seltsame Bytecode-Größe Java Basics - Anfänger-Themen 22
@ Umgebungsvariable Bytecode per CMD interpretieren => unverständlicher Fehler Java Basics - Anfänger-Themen 2
O Java will mir den Quelltext nich zu Bytecode Compilieren Java Basics - Anfänger-Themen 24
S Bytecode sichtbar machen Java Basics - Anfänger-Themen 2
-horn- Java-Bytecode und Outputs verschlüsseln? Java Basics - Anfänger-Themen 3
E I-JVM verstehe ich das richtig (bytecode aufgabe) Java Basics - Anfänger-Themen 2
W Java Bytecode Java Basics - Anfänger-Themen 3
B Fragen zu threads, swing, und dem bytecode compiler, etc. Java Basics - Anfänger-Themen 4
O File2String /Bytecode auslesen Java Basics - Anfänger-Themen 2
M Bytecode ansehen Java Basics - Anfänger-Themen 2
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
S Verstaendnisfrage Java2D, Affine Transformation, Rendering Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben