2013-11-28 16 views
24

Ich suche nach besseren HotSwapping in der JavaVM. Die Möglichkeit, nur Änderungen am Methodenkörper vorzunehmen, ist in Ordnung, aber sehr einschränkend.Erweiterter Code Hot Swapping in JDK 8?

Die verfügbaren Optionen sind JRebel und ein nicht fortgeführtes Projekt mit der Bezeichnung Dynamic Code Evolution Virtual Machine (DCEVM).

Es gibt eine JEP 159 da draußen, die von der Kernentwickler von DCEVM geschrieben wurde. Ein Blogbeitrag aus dem Jahr 2011 erwähnt, dass die Entwickler von DCEVM jetzt für Oracle arbeiten, um dies in das JDK zu integrieren.

Haben wir diese Art von Unterstützung für JDK 8 Beta bereits oder wurde sie auf JDK 9 verschoben?

Ich brauche Hot Swapping zum Hinzufügen und Entfernen und Umbenennen von privaten Methoden meist. Dies würde viel helfen. Gibt es ein Produkt, das mir das erlaubt (neben JRebel, welche PR-Kampagnen mich verärgert haben)?

Die letzte unterstützte Version von DCEVM ist für 1.6u24 und bietet nur 32-Bit-Linux-Binärdateien. Seit ich 1.7 und 64bit Linux benutze, ist das für mich ein Hingucker.

Es gibt auch ein anderes Projekt auf github mit der Bezeichnung Fakereplace. Kann das leicht für meine Zwecke verwendet werden oder sollte ich das nicht untersuchen?

+4

Einer der JRebel-Entwickler hat einmal einen kleinen Überblick über verschiedene Code-Swap-Lösungen auf dem Markt gegeben - http://Stackoverflow.com/a/17642585/2269816 In meiner persönlichen Meinung hat JRebel die Arbeit sehr gut gemacht, kein Konkurrent kann komme im Moment näher.Ein Werkzeug nicht nur zu verwenden, weil Sie ihr Marketing nicht mögen, obwohl das Werkzeug selbst von höchster Qualität ist, schmerzt hauptsächlich Sie selbst. –

Antwort

10

JEPs, die in JDK 8 und JDK 9 kommen, sind in this page aufgeführt. JEP-159 ist nicht unter ihnen. Von jep index können Sie sehen, dass JEP-159 ist noch nicht zielgerichtet zu einem JDK-Release, nicht einmal jdk 10.

JEP-159 Status ist derzeit "Submitted". Der Prozess is described wie folgt:

Eine erfolgreiche JEP geht durch die folgenden Zustände:

  • Draft - In Umlauf vom Autor für die erste Bewertung und Konsensbildung
  • geschrieben - Eingetragen in die JEP Archiv des Autors für eine breitere Bewertung
  • eingereicht - erklärt vom Autor zur Auswertung bereit sein
  • Candidate - Akzeptierte für die Aufnahme in den Fahrplan der Ope nJDK Blei
  • finanziert - Beurteilt durch eine Gruppe oder Bereich Blei voll
  • abgeschlossen finanziert werden - fertige und lieferte

So ist es noch nicht für eine Roadmap akzeptiert.

+1

Deshalb frage ich mich, ob es eine Pre-Alpha-Version oder etwas Vergleichbares gibt. Das DCEVM-Projekt war ziemlich weit entwickelt, deshalb frage ich mich, warum es keine Version 1.7 gibt und ich hoffe auf eine Version 1.8. –

+0

@MartinKersten Ich sehe nicht, wie es eine Pre-Alpha-Version geben würde, da sie zumindest noch nicht in irgendeinen Bereich aufgenommen wurde. – eis

+2

Ich hoffte auf etwas wie ein Fragment, das man installieren und ausführen kann. Als ich sah, dass die DCEVM-Version für JDK6 und jene Leute, die seit zwei Jahren bei Oracle angestellt sind, funktionierte, hoffte ich auf etwas, das die aktuelle Entwicklung zeigt. Ich hoffe nur, dass Oracle sich nicht dazu entschlossen hat, seine eigenen Leistungen aufzugeben und dieses Team aufzugeben. –

11

Es gibt eine Verzweigung von DCEVM, die im Repository unter verwaltet wird. Es wurde kürzlich für Java 8 aktualisiert. Die Binärdateien sind über die GitHub-Versionen oder über die downloads page verfügbar.

Für einfache Dinge, wie Hinzufügen/Entfernen von Methoden, sollte es ziemlich zuverlässig sein (verifiziert durch automatisierte Tests in 16 verschiedenen Konfigurationen). Es könnte jedoch immer noch JVM zum Absturz bringen, daher sollte es keinesfalls in der Produktion verwendet werden.

+0

Danke. Ich werde es mir ansehen. Ich brauche es für die Entwicklung, es wird großartig, wenn es funktioniert. –

+0

Ich möchte nur Rendering-Methoden für HTML-Seiten im laufenden Betrieb ändern, um mir eine Erfahrung ähnlich wie PHP zu geben. Sobald ich das Ergebnis erhalten habe, würde ich die Komponententests für die Seite anpassen, um das korrigierte Ergebnis zu erwarten. Heute muss ich den Front-End-Server jedes Mal neu starten, anstatt die Seite jedes Mal neu zu laden, wenn sich der Code ändert (habe gerade eine Dart-Funktion hinzugefügt, die den Server nach dem Status fragt). –

+3

Vielen Dank, ich habe es gerade mit Oracle 1.8.0_05 x86-64 auf Linux versucht und es funktioniert wunderbar. Der Fastdebug ist allerdings ziemlich langsam, also benutze das "product" -Profil. –